Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 147 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

EspaƱol

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Carreteras

Land

Dynamo for Civil 3D

Aunque Dynamo se creó originalmente con Revit en mente, su versatilidad como herramienta de programación visual se extiende mÔs allÔ de esta solución. Dynamo también estÔ integrado en Civil 3D, lo que permite a los usuarios crear eficaces rutinas de automatización para proyectos de infraestructuras civiles. Se trata de una herramienta extremadamente útil para procesar desde tareas habituales hasta los flujos de trabajo de diseño mÔs complejos, lo que le ayudarÔ en última instancia a ahorrar tiempo, optimizar sus diseños y tomar mejores decisiones al respecto. Dynamo ofrece todo un conjunto de nodos diseñados específicamente para Civil 3D, así como bibliotecas de terceros procedentes de una floreciente comunidad de usuarios.

Este capítulo del manual de introducción, se centrarÔ en Dynamo for Civil 3D, desde lo mÔs bÔsico hasta temas mÔs avanzados.

TopografĆ­a

RaĆ­l

Temas avanzados

Con el tiempo, puede que necesite ir mÔs allÔ de los conceptos bÔsicos y profundizar en el funcionamiento interno de Dynamo. Las pÔginas de esta sección le proporcionarÔn un esquema para descubrir las funciones avanzadas de Dynamo for Civil 3D a fin de que pueda llevar sus grÔficos al siguiente nivel.

Servicios

Introducción

Dynamo ha evolucionado desde sus orígenes como un complemento para BIM (Building Information Modeling) en Revit para convertirse en algo mucho mÔs diverso. Ante todo, se trata de una plataforma que permite a los diseñadores explorar la programación visual, resolver problemas y crear sus propias herramientas. Comencemos nuestro viaje con Dynamo proporcionando algo de contexto: ¿qué es y cómo puedo utilizarlo?

Ecosistema de Dynamo

¿Qué es Dynamo y cómo funciona?

Dynamo es una aplicación de programación visual que se puede descargar y ejecutar en modo "Sandbox" independiente o como un módulo de extensión para otro software como Revit, FormIt o Civil 3D.

Obtenga mÔs información sobre la diferencia entre Dynamo Core, Revit y Sandbox.

El proceso

Dynamo nos permite trabajar en un proceso de programación visual en el que conectaremos elementos para definir las relaciones y las secuencias de acciones que componen algoritmos personalizados. Podemos utilizar nuestros algoritmos con diferentes fines, desde el procesamiento de datos hasta la generación de geometría, todo en tiempo real y sin necesidad de escribir un Ôpice de código o code.

Conexión de nodos y cables

Los nodos y los cables son los componentes clave de Dynamo que impulsan el proceso de programación visual. Este ayuda a establecer relaciones visuales y sistémicas sólidas entre las piezas de un diseño. Con un simple clic del ratón, conecte fÔcilmente los nodos mientras desarrolla y optimiza el flujo de trabajo de diseño.

¿Qué puede lograr Dynamo?

Desde el uso de la programación visual para flujos de trabajo de proyectos hasta el desarrollo de herramientas personalizadas, Dynamo es un aspecto integral de una amplia variedad de aplicaciones interesantes.

Siga el panel de Dynamo en acción en Pinterest.

DiseƱo con listas

Las listas son la forma en que organizamos los datos. En el sistema operativo del equipo, tiene archivos y carpetas. En Dynamo, podemos considerarlos como elementos y listas respectivamente. Al igual que su sistema operativo, existen muchas formas de crear, modificar y consultar datos. En este capĆ­tulo, vamos a desglosar el modo en que se gestionan las listas en Dynamo.

Los bloques de construcción de los programas

Una vez que estemos listos para profundizar en el desarrollo de programas visuales, necesitaremos una mejor comprensión de los componentes de construcción que utilizaremos. En este capítulo, se presentan conceptos fundamentales sobre los datos: el contenido que recorre los cables de nuestro programa de Dynamo.

Diccionarios en bloques de código

Dynamo 2.0 no solo presenta los nodos indicados anteriormente para los diccionarios, sino que también hay nuevas funciones en los bloques de código para ello.

Puede utilizar una sintaxis como la siguiente o representaciones basadas en DesignScript de los nodos.

Dado que un diccionario es un tipo de objeto de Dynamo, podemos realizar las siguientes acciones con Ʃl.

Mantener este tipo de interacciones resulta especialmente útil al relacionar datos de Revit con cadenas. A continuación, veremos algunos casos de uso de Revit.

Geometrƭa para el diseƱo computacional

Dynamo, un entorno de programación visual, le permite diseñar la forma en que se procesan los datos. Los datos son números o texto, pero también lo es la geometría. Tal y como lo entiende el equipo, la geometría (denominada a veces geometría computacional) son los datos que se pueden utilizar para crear modelos atractivos, complejos o basados en el rendimiento. Para ello, debemos conocer los pormenores de los diversos tipos de geometría que podemos utilizar.

Dynamo para Revit

Dynamo es un entorno flexible diseƱado para su uso en una amplia gama de programas y creado originalmente para su uso con Revit. Un programa visual crea opciones eficaces para BIM (Building Information Modeling). Dynamo ofrece un conjunto completo de nodos diseƱados especƭficamente para Revit, asƭ como bibliotecas de terceros de una creciente comunidad de AEC. Este capƭtulo se centra en los conceptos bƔsicos de uso de Dynamo en Revit.

Acerca de

Para Dynamo v2.13 y versiones posteriores

Dynamo es una plataforma de programación visual de código abierto para diseñadores.

Bienvenido

Acaba de abrir Dynamo Primer, una guía completa de programación visual en Autodesk Dynamo. Este manual de introducción es un proyecto continuo para compartir los conceptos bÔsicos de programación. Entre los temas, se incluyen el trabajo con geometría computacional, los procedimientos recomendados para el diseño basado en reglas, las aplicaciones de programación interdisciplinarias y muchos mÔs aspectos relacionados con la plataforma Dynamo.

La potencia de Dynamo se puede encontrar en una amplia variedad de actividades relacionadas con el diseƱo. Dynamo ofrece una lista ampliable de mƩtodos accesibles para que dƩ sus primeros pasos:

  • Explore la programación visual por primera vez.

  • Conecte flujos de trabajo en varios programas.

  • Participe en una comunidad activa de usuarios, colaboradores y desarrolladores.

  • Desarrolle una plataforma de código abierto para seguir mejorando.

En medio de esta actividad y magnĆ­fica oportunidad para trabajar con Dynamo, necesitamos un documento del mismo calibre, Dynamo Primer.

Consulte el para obtener información sobre lo que puede aprender en esta guía.

Estamos mejorando continuamente Dynamo, por lo que algunas funciones pueden tener un aspecto diferente al que se representa en este manual de introducción. Sin embargo, todos los cambios de funcionalidades se representarÔn correctamente.

Código abierto

El proyecto Dynamo Primer es de código abierto. Nos hemos dedicado a proporcionar contenido de calidad y agradeceremos cualquier comentario que pueda tener. Si desea informar de una incidencia sobre cualquier aspecto, publíquelo en la pÔgina de incidencias de GitHub: .

Si desea contribuir con una nueva sección, modificaciones o cualquier otra aportación a este proyecto, consulte el repositorio de GitHub para empezar: .

El proyecto Dynamo Primer

Dynamo Primer es un proyecto de código abierto iniciado por Matt Jezyk y el equipo de desarrollo de Dynamo de Autodesk.

Mode Lab recibió el encargo de escribir la primera edición del manual de introducción. Les agradecemos todos sus esfuerzos para establecer este valioso recurso.


A John Pierson de Parallax Team se le encargó actualizar el manual de introducción para incluir las revisiones de Dynamo 2.0.


A Matterlab se le encargó actualizar el manual de introducción para incluir las revisiones de Dynamo 2.13.


A Archilizer se le encargó actualizar el manual de introducción para incluir las revisiones de Dynamo 2.17.


A Wood Rodgers se le encargó actualizar el manual de introducción con contenido sobre Dynamo for Civil 3D.

Agradecimientos

Un agradecimiento especial a Ian Keough por iniciar y guiar el proyecto de Dynamo.

Deseamos agradecer a Matt Jezyk, Ian Keough, Zach Kron, Racel Amour y Colin McCrone su colaboración entusiasta y la oportunidad de participar en una amplia gama de proyectos de Dynamo.

Software y recursos

Dynamo Consulte los siguientes sitios para obtener la versión estable mÔs reciente de Dynamo.

o

  • Nota: A partir de Revit 2020, Dynamo se incluye en las versiones de Revit, por lo que no es necesaria la instalación manual. Hay mĆ”s información disponible en esta .

DynamoBIM: la mejor fuente de información adicional, contenido de aprendizaje y foros es el sitio web de DynamoBIM.

Dynamo en GitHub Dynamo es un proyecto de código abierto en GitHub. Para colaborar, consulte DynamoDS.

Contacto Infórmenos de cualquier problema relacionado con este documento.

[email protected]

Licencia

Copyright 2023 Autodesk

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. Puede obtener una copia de la licencia en

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Nodos de diccionario

Dynamo 2.0 presenta una gran variedad de nodos de diccionario para nuestro uso. Esto incluye los nodos de creación, acción y consulta.

Crear

  1. Dictionary.ByKeysValues crearÔ un diccionario con las claves y los valores proporcionados. (El número de entradas serÔ el de la entrada de lista mÔs corta).

Acción

  1. Dictionary.Components generarĆ” los componentes del diccionario de entrada. (Es el proceso inverso al nodo creado).

  2. Dictionary.RemoveKeys generarĆ” un nuevo objeto de diccionario con las claves de entrada eliminadas.

  3. Dictionary.SetValueAtKeys crearĆ” un nuevo diccionario basado en las claves de entrada y los valores para reemplazar el valor actual en las claves correspondientes.

  4. Dictionary.ValueAtKey devolverĆ” el valor en la clave de entrada.

Consulta

  1. Dictionary.Count le indicarƔ cuƔntos pares de clave-valor hay en el diccionario.

  2. Dictionary.Keys devolverĆ” las claves almacenadas actualmente en el diccionario.

  3. Dictionary.Values devolverĆ” los valores almacenados actualmente en el diccionario.

Relacionar de forma general datos con diccionarios es una magnƭfica alternativa al antiguo mƩtodo de trabajo con ƭndices y listas.

Nodos personalizados

Dynamo ofrece muchos nodos principales para una amplia gama de tareas de programación visual. En ocasiones, una solución mÔs rÔpida, elegante o fÔcil de compartir consiste en crear sus propios nodos. Estos se pueden reutilizar en distintos proyectos, lo que permite que los grÔficos sean mÔs claros y limpios, y se puedan transferir a Package Manager y compartir con la comunidad global de Dynamo.

Nodos y conceptos bƔsicos

En esta sección, presentamos los nodos bÔsicos disponibles en la biblioteca de Dynamo que le ayudarÔn a crear su propio programa visual como un profesional.

  • : Āæcómo puedo trabajar con elementos geomĆ©tricos en Dynamo? Explore varias formas de crear geometrĆ­as simples o complejas a partir de primitivas.

  • : ĀæquĆ© son los "datos" y quĆ© tipos fundamentales puedo utilizar en mis programas? AdemĆ”s, aprenda a incorporar operaciones matemĆ”ticas y lógicas en el flujo de trabajo de diseƱo.

  • : Āæcómo administro y coordino las estructuras de datos? Obtenga mĆ”s información sobre el concepto de lista y utilĆ­celo para administrar de forma eficaz los datos de diseƱo.

  • : ĀæquĆ© son los diccionarios? Aprenda a utilizar diccionarios para buscar datos y valores especĆ­ficos de resultados existentes.

Nodos y paquetes personalizados

De forma predefinida, Dynamo tiene muchas funciones almacenadas en su biblioteca de nodos. Para las rutinas de uso frecuente o ese grÔfico especial que desea compartir con la comunidad, los nodos y los paquetes personalizados son un método excelente para ampliar Dynamo aún mÔs.

Flujos de trabajo de ejemplo

Carreteras, ferrocarriles, terrenos, servicios pĆŗblicos, topografĆ­a, GIS...

La infraestructura civil es todo esto y mÔs. Esta sección contiene varios grÔficos de ejemplo útiles y prÔcticos que le ayudarÔn a alcanzar pleno dominio de Dynamo y a descubrir todo el potencial de Dynamo for Civil 3D. Cada grÔfico se completa con descripciones detalladas de la lógica que se empleó para crearlo, de modo que no solo pueda utilizarlo, sino también comprenderlo.

AdemÔs, estos ejemplos encarnan prÔcticas recomendadas de eficacia probada para crear grÔficos útiles. A medida que trabaje con los ejemplos, le animamos a familiarizarse con la sección de para obtener mÔs ideas sobre cómo crear grÔficos eficaces, flexibles y manejables.

Paquetes

Una vez que haya creado algunos nodos personalizados, el siguiente paso es comenzar a organizarlos y publicarlos mediante paquetes, una forma cómoda de almacenar y compartir sus nodos con la comunidad de Dynamo.

Bloques de código y DesignScript

El bloque de código es una función exclusiva de Dynamo que vincula dinÔmicamente un entorno de programación visual con uno basado en texto. El bloque de código tiene acceso a todos los nodos de Dynamo y puede definir un grÔfico completo en un nodo. Lea este capítulo detenidamente, ya que el bloque de código es un elemento fundamental de Dynamo.

Python

​Python es un lenguaje de programación muy utilizado cuya popularidad tiene mucho que ver con su estilo de sintaxis. Es altamente legible, lo que hace que su aprendizaje sea mĆ”s sencillo que el de muchos otros idiomas. Python admite módulos y paquetes, y se puede incrustar en aplicaciones existentes. Para obtener información sobre cómo empezar a trabajar con Python, un buen recurso es la pĆ”gina (GuĆ­a de introducción) de .

Codificación en Dynamo

Dynamo es un excelente punto de partida para empezar a codificar en el mundo AEC. Puede que le interesen algunas de estas secciones para iniciar su recorrido por la codificación:

Ejecutar grƔficos en Dynamo Player

Al abrir un grƔfico, los nodos marcados como "Is Input" se muestran en el Reproductor y puede interactuar con ellos.

En algunas entradas, se le llevarÔ a un modo de selección en el que puede seleccionar elementos de la escena. Haga clic en Confirm selection para aceptar la selección y volver a ver las entradas del grÔfico.

Haga clic en Run en Dynamo Player para ejecutar el grƔfico. Cuando haya terminado, los nodos Watch y Watch 3D marcados como "Is Output" se mostrarƔn de la siguiente manera:

Los grÔficos que generan geometría le ofrecen la opción de previsualizarla y añadirla al sitio. Haga clic en el icono de ojo para activar y desactivar la vista preliminar y, a continuación, haga clic en Add para añadir la geometría al sitio.

Geometrƭa para el diseƱo computacional
Los bloques de construcción de los programas
DiseƱo con listas
Diccionarios de Dynamo
PrƔcticas recomendadas
IMAGE
Bloques de código y DesignScript
GeometrĆ­a con DesignScript
Python

Dynamo en Forma

Dynamo estÔ disponible como extensión en Forma. Por el momento, estÔ disponible en estos dos formatos: una versión conectada al escritorio y una integración basada en la nube, que se ofrece como versión beta cerrada. Obtenga mÔs información sobre la versión de escritorio en esta entrada del blog y sobre la integración en la nube en versión beta en esta entrada del blog. Tenga en cuenta que el blog se publicó durante la fase beta cerrada; la integración en la nube estÔ actualmente en fase beta abierta y disponible para todos los usuarios de Forma.

¿Qué es Autodesk Forma?

Autodesk Forma es un software basado en la nube que ofrece eficaces herramientas basadas en IA, pero fÔciles de usar, para el diseño previo y esquemÔtico. Los arquitectos y los diseñadores utilizan Forma para modelar complejos diseños en 3D en cuestión de minutos, optimizar la calidad de vida y la sostenibilidad mediante anÔlisis medioambientales en tiempo real y continuar el proceso de diseño mediante la conexión fluida con Revit, Rhino y Dynamo. Puede obtener mÔs información e iniciar la versión de prueba gratuita o comprar el producto aquí: Autodesk Forma. Forma se incluye como parte de la AEC Collection.

¿Qué es Dynamo Player en Forma?

Dynamo Player es una extensión que ofrece una gran variedad de funciones de automatización del diseño a los usuarios de Forma. Estas son algunas de las principales ventajas de utilizar Dynamo Player con Forma:

  • Automatización optimizada: Dynamo Player simplifica el proceso de automatización de tareas y flujos de trabajo repetitivos en Forma. Los grĆ”ficos personalizados creados con el entorno de programación visual de Dynamo se pueden ejecutar directamente en Forma con solo unos clics. Los grĆ”ficos se muestran en forma de lista en Dynamo Player, lo que facilita su selección y ejecución siempre que sea necesario. Este proceso optimizado le permite ejecutar rĆ”pidamente tareas repetitivas, lo que reduce errores y aumenta la eficiencia.

  • Interfaz fĆ”cil de usar: Dynamo Player ofrece una interfaz fĆ”cil de usar que lo hace accesible a los usuarios de Forma, sin necesidad de tener conocimientos sobre Dynamo. En el futuro, tenemos previsto publicar mĆ”s grĆ”ficos de ejemplo que le permitan acceder a automatizaciones impulsadas por Dynamo sin necesidad de recurrir a desarrolladores o conocimientos avanzados de codificación.

  • ParĆ”metros personalizables: Dynamo Player le permite definir parĆ”metros de entrada para los grĆ”ficos de automatización, por lo que podrĆ” personalizar el comportamiento de los grĆ”ficos en función de los requisitos especĆ­ficos del proyecto. Puede configurar opciones y valores que se pueden modificar fĆ”cilmente cada vez que se ejecuta el grĆ”fico, lo que proporciona flexibilidad y capacidad de adaptación a diferentes situaciones.

  • Reutilizar y compartir: Dynamo Player fomenta la colaboración y el intercambio de conocimientos entre los usuarios de Forma. Los grĆ”ficos de automatización pueden guardarse y reutilizarse en varios sitios, lo que garantiza la coherencia y la eficacia. AdemĆ”s, puede compartir sus secuencias de comandos con otros miembros de la comunidad de Forma, lo que facilita que todos se beneficien mutuamente de las soluciones de automatización.

manual de introducción
https://github.com/DynamoDS/DynamoPrimerNew/issues
https://github.com/DynamoDS/DynamoPrimerNew
https://dynamobim.com/download/
https://dynamobuilds.com
publicación del blog
https://dynamobim.org
https://github.com/DynamoDS/Dynamo
https://www.apache.org/licenses/LICENSE-2.0
Logotipo de Dynamo
"Getting Started"
Python.org

Manual de introducción, comunidad y plataforma de Dynamo

Este manual de introducción incluye capítulos desarrollados con Mode Lab. Estos capítulos se centran en los conceptos bÔsicos que necesita para empezar a trabajar y desarrollar sus propios programas visuales con Dynamo e influyen decisivamente en cómo llevar Dynamo a un nivel superior.

Manual de introducción

Este manual se ha diseñado para lectores de diferentes orígenes y con distintos niveles de habilidades. En las siguientes secciones, se ofrece información general sobre la configuración de Dynamo, la interfaz de usuario y los conceptos clave. Es recomendable que los nuevos usuarios aborden los siguientes temas:

  • ĀæQuĆ© es Dynamo y cómo funciona?

  • Configuración de Dynamo

  • Interfaz de usuario

  • Nodos y cables

Para los usuarios que deseen obtener información mÔs exhaustiva de cada elemento, como un nodo específico y el concepto subyacente, abordaremos los conceptos bÔsicos en su propio capítulo.

  • Nodos y conceptos bĆ”sicos

Si desea ver la demostración de los flujos de trabajo de Dynamo, hemos incluido algunos grÔficos en la sección Flujos de trabajo de ejemplo. Siga las instrucciones que se adjuntan para crear sus propios grÔficos de Dynamo.

  • Jarrón paramĆ©trico

  • Puntos de atractor

En capítulos posteriores, se pueden encontrar mÔs ejercicios específicos de los temas, ya que abordamos diferentes aspectos de Dynamo. Los ejercicios se suelen encontrar en la última sección de cada pÔgina.

La comunidad

Dynamo no serƭa lo que es sin un grupo fiel de fervientes usuarios y colaboradores activos. Participe en la comunidad: siga el blog, aƱada su trabajo a la galerƭa o hable de Dynamo en el foro.

El foro

La plataforma

Dynamo es una herramienta de programación visual para diseñadores, lo que nos permite crear herramientas que utilicen bibliotecas externas o cualquier producto de Autodesk que tenga una API. Dynamo Sandbox permite desarrollar programas en una aplicación de estilo "Sandbox". Y el ecosistema de Dynamo sigue creciendo.

El código fuente del proyecto es de código abierto, lo que nos permite ampliar su funcionalidad como deseemos. Eche un vistazo al proyecto en GitHub y examine los trabajos en curso de los usuarios que personalizan Dynamo.

El repositorio

Examine, bifurque y empiece a ampliar Dynamo en función de sus necesidades.

Diccionarios en Dynamo

Los diccionarios representan una recopilación de datos relacionados con otro elemento de datos conocido como clave. Los diccionarios muestran la capacidad de buscar, suprimir e insertar datos en una colección.

BƔsicamente, podemos considerar un diccionario como una manera realmente inteligente de buscar algo.

Aunque la función de diccionario lleva disponible en Dynamo durante algún tiempo, Dynamo 2.0 presenta una nueva forma de administrar este tipo de datos.

Imagen original por cortesĆ­a de: sixtysecondrevit.com

Reproductor de Dynamo

Ejecución de un grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en Civil 3D

El Reproductor de Dynamo proporciona un mƩtodo simplificado para ejecutar grƔficos de Dynamo en Civil 3D. Una vez que se haya creado un grƔfico, no es necesario tener conocimientos de Dynamo para utilizar el Reproductor y ejecutar los grƔficos. Esto facilita el intercambio de grƔficos con otros usuarios que podrƭan no estar interesados en explorar los detalles de nodos y cables.

Para obtener mÔs información sobre el Reproductor de Dynamo en Civil 3D, consulte la documentación proporcionada en el sitio de la Ayuda de Civil 3D.

AƱadir y compartir grƔficos en Dynamo Player

Una vez que haya configurado Dynamo Player, puede abrir los archivos en el Reproductor. Si utiliza la versión de escritorio, también deberÔ tener Dynamo abierto.

Abrir un grÔfico conectado en la versión de escritorio de Dynamo

Si utiliza la versión de escritorio de Dynamo, el Reproductor reconocerÔ un grÔfico abierto en Dynamo y le ofrecerÔ la opción de abrirlo en el Reproductor.

En las fichas Service y Desktop, encontrarƔ un Ɣrea denominada Upload graph [ 1 ] donde puede arrastrar y soltar archivos .dyn para aƱadirlos al Reproductor. TambiƩn puede hacer clic en el Ɣrea para abrir un cuadro de diƔlogo en el que buscar y aƱadir archivos.

Los grÔficos que cargue aparecerÔn en Uploaded graphs [ 2 ]. Puede abrir el grÔfico o hacer clic en el menú de opciones (tres puntos) para eliminar, descargar o compartir el grÔfico.

Los grƔficos se pueden compartir en un sitio o un centro [ 3 ]. Un centro incluye varios sitios. Para compartir un grƔfico, haga clic en Share graph e introduzca los detalles del grƔfico. Puede elegir si desea compartir el grƔfico en el sitio o en el centro. Al hacer clic en Share, el grƔfico pasa a estar disponible para otros usuarios con acceso a ese sitio o centro.

Compartir un grƔfico

Dynamo Player incluye varios grÔficos prediseñados en la sección Graphs provided by Autodesk [ 4 ]. Estos son un excelente punto de partida para la exploración y la experimentación.

Publicación en la biblioteca

Acabamos de crear un nodo personalizado y lo hemos aplicado a un proceso específico en el grÔfico de Dynamo. Y nos gusta tanto este nodo que deseamos conservarlo en nuestra biblioteca de Dynamo para hacer referencia a él en otros grÔficos. Para ello, publicaremos el nodo localmente. Este es un proceso similar al de la publicación de un paquete, que se explicarÔ con mÔs detalle en el siguiente capítulo.

Al publicar un nodo localmente, se podrÔ acceder a este en la biblioteca de Dynamo cuando se abra una nueva sesión. Si no se publica un nodo, un grÔfico de Dynamo que haga referencia a un nodo personalizado deberÔ incluir este en su carpeta (o este deberÔ importarse a Dynamo mediante Archivo > Importar biblioteca).

Puede publicar nodos y paquetes personalizados desde Dynamo Sandbox en la versión 2.17 y posteriores, siempre que no presenten dependencias de la API del anfitrión. En versiones anteriores, la publicación de nodos y paquetes personalizados solo estaba activada en Dynamo for Revit y Dynamo para Civil 3D.

Ejercicio: publicación local de un nodo personalizado

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Avancemos con el nodo personalizado que hemos creado en la sección anterior. Una vez abierto el nodo personalizado PointsToSurface, se muestra el grÔfico en el editor de nodos personalizados de Dynamo. También puede abrir un nodo personalizado haciendo doble clic en él en el editor de grÔficos de Dynamo.

Para publicar localmente un nodo personalizado, haga clic con el botón derecho en el lienzo y seleccione "Publicar este nodo personalizado".

Rellene la información pertinente similar a la imagen anterior y seleccione "Publicar localmente". Observe que el campo Grupo define el elemento principal al que se puede acceder desde el menú de Dynamo.

Seleccione una carpeta para alojar todos los nodos personalizados que tiene previsto publicar localmente. Dynamo comprobarÔ esta carpeta cada vez que se cargue, por lo que debe asegurarse de que esta se encuentre en una ubicación permanente. Vaya a esta carpeta y elija "Seleccionar carpeta". El nodo de Dynamo se publica ahora localmente y permanecerÔ en la biblioteca de Dynamo cada vez que cargue el programa.

Para comprobar la ubicación de la carpeta de nodos personalizados, vaya a Dynamo > Preferencias > Configuración de paquetes > Rutas de nodos y paquetes.

En esta ventana, se muestra una lista de rutas.

  1. Documents\DynamoCustomNodes... hace referencia a la ubicación de los nodos personalizados que se han publicado localmente.

  2. AppData\Roaming\Dynamo... hace referencia a la ubicación por defecto de los paquetes de Dynamo instalados en línea.

  3. Es posible que desee desplazar la ruta de carpeta local hacia abajo en el orden de la lista anterior. (Para ello, haga clic en la flecha hacia abajo situada a la izquierda de los nombres de ruta). La carpeta superior es la ruta por defecto para las instalaciones de paquetes. Por lo tanto, al mantener la ruta de instalación por defecto de paquetes de Dynamo como la carpeta por defecto, los paquetes en línea se separarÔn de los nodos publicados localmente.

Cambiamos el orden de los nombres de ruta para que la ruta por defecto de Dynamo sea la ubicación de instalación de paquetes.

Al acceder a esta carpeta local, podemos encontrar el nodo personalizado original en la carpeta ".dyf", que es la extensión de un archivo de nodo personalizado de Dynamo. Podemos editar el archivo en esta carpeta; el nodo se actualizarÔ en la interfaz de usuario. También podemos añadir mÔs nodos a la carpeta principal de DynamoCustomNode; Dynamo los añadirÔ a la biblioteca al reiniciar.

Dynamo ahora se cargarĆ” cada vez con PointsToSurface en el grupo DynamoPrimer de la biblioteca de Dynamo.

GeometrĆ­a con DesignScript

En esta sección, encontrarÔ una serie de lecciones sobre la creación de geometría con DesignScript. Para continuar, copie el contenido de DesignScript de ejemplo en bloques de código de Dynamo.

Puntos

Puntos en Dynamo

¿Qué es un punto?

Un se define por uno o mÔs valores denominados coordenadas. El número de valores de coordenadas necesarios para definir el punto depende del sistema de coordenadas o del contexto en el que se encuentra.

Punto 2D y 3D

El tipo de punto mÔs común en Dynamo se encuentra en el sistema de coordenadas universales tridimensional y tiene tres coordenadas [X,Y,Z] (punto 3D en Dynamo).

Un punto 2D de Dynamo tiene dos coordenadas [X,Y].

Punto en curvas y superficies

Los parƔmetros de las curvas y las superficies son continuos y se extienden mƔs allƔ del borde de la geometrƭa especificada. Como las formas que definen el espacio paramƩtrico se encuentran en un sistema de coordenadas universales tridimensional, siempre se puede convertir una coordenada paramƩtrica en una coordenada "universal". Por ejemplo, el punto [0,2, 0,5] de la superficie es el mismo que el punto [1,8, 2,0, 4,1] de las coordenadas universales.

  1. Punto en presuntas coordenadas XYZ globales

  2. Punto relativo a un sistema de coordenadas especificado (cilĆ­ndrico)

  3. Punto como coordenada UV en una superficie

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Información mÔs detallada sobre...

Si la geometría es el idioma de un modelo, los puntos son el alfabeto. Los puntos son la base sobre la que se crea el resto de la geometría; se necesitan al menos dos puntos para crear una curva. tres puntos para crear un polígono o una cara de malla, etc. La definición de la posición, el orden y la relación entre los puntos (pruebe con una función de seno) nos permite definir geometrías de orden superior, como elementos que reconocemos como círculos o curvas.

  1. Un cĆ­rculo que utiliza las funciones x=r*cos(t) y y=r*sin(t)

  2. Una curva seno que utiliza las funciones x=(t) y y=r*sin(t)

Punto como coordenadas

Los puntos también pueden existir en un sistema de coordenadas bidimensional. La convención tiene diferentes notaciones de letras en función del tipo de espacio con el que se trabaje: es posible que se utilice [X,Y] en un plano o [U,V] en una superficie.

  1. Un punto en el sistema de coordenadas euclidiano: [X,Y,Z]

  2. Un punto en un sistema de coordenadas de parƔmetro de curva: [t]

  3. Un punto en un sistema de coordenadas de parƔmetro de superficie: [U,V]

Paquetes Ćŗtiles

Los paquetes de Dynamo son conjuntos de herramientas desarrollados por terceros para ampliar las principales funciones de Dynamo. Todos los usuarios pueden acceder a ellos y descargarlos con un solo clic.

Consulte la sección para obtener mÔs información sobre cómo empezar a trabajar con paquetes.

A continuación, se muestra una lista de algunos de los paquetes mÔs populares que pueden llevar los grÔficos de Dynamo for Civil 3D al siguiente nivel.

Kit de herramientas de Civil 3D

El kit de herramientas de Civil 3D es un paquete de Dynamo for Civil 3D que aporta importantes mejoras a las funciones de Dynamo mediante un gran nĆŗmero de nodos adicionales.

Comentarios

Clases de Autodesk University relacionadas

Camber

Camber es un paquete de Dynamo for Civil 3D de código abierto que incluye cientos de nodos para trabajar con etiquetas, refX, accesos directos a datos, estilos y mucho mÔs.

Comentarios

Código fuente

CivilConnection

CivilConnection es un paquete de Dynamo para Revit de código abierto que permite el intercambio de información entre Civil 3D, Dynamo y Revit.

Clases de Autodesk University relacionadas

Código fuente

Nodos de Arkance Systems

Los nodos de Arkance Systems son un paquete de Dynamo for Civil 3D con una amplia variedad de nodos útiles para trabajar con cotas, tablas, vistas, control de taladros y mucho mÔs.

Comentarios

Documentación

// copy this code into a Code Block
// to start writing DesignScript

x = "Let's create some geometry!";
6KB
PointsToSurface.dyf
Open
punto
7KB
Geometry for Computational Design - Points.dyn
Open
Del punto a la curva
Punto como coordenadas

Diferencias en el servicio de cÔlculo de Dynamo con la versión de escritorio de Dynamo

En esta pƔgina, se destacan las diferencias que debe tener en cuenta al escribir programas de Dynamo para que se ejecuten en el contexto de la nube del servicio de cƔlculo de Dynamo.

¿Qué es DaaS?

DaaS, Dynamo como servicio, servicio de cÔlculo de Dynamo y otros términos relacionados hacen referencia a lo mismo, el tiempo de ejecución central de Dynamo al ejecutarse en un contexto de nube. Esto significa que el grÔfico no se estÔ ejecutando en el equipo. Actualmente, solo se puede acceder a DaaS a través de la extensión Dynamo Player para Forma, donde los usuarios pueden cargar y gestionar archivos .dyn creados en el entorno de escritorio, ejecutar archivos .dyn compartidos por sus compañeros a través de la extensión o utilizar rutinas de .dyn precargadas proporcionadas por Autodesk como ejemplos.

Debido a que los grÔficos se ejecutan en este contexto de nube y no en el equipo, por el momento, DaaS no puede utilizar directamente los contextos de anfitrión tradicionales de Dynamo (Revit, Civil 3D, etc.). Si desea utilizar tipos de esos programas en el grÔfico, deberÔ serializarlos (guardarlos) en el grÔfico mediante el nodo Data.Remember u otras técnicas de serialización dentro del grÔfico. Estos son similares a los flujos de trabajo que debe utilizar al escribir grÔficos para la función Diseño generativo de Revit.

¿Qué versión de Dynamo ejecuta el código?

La versión se basa en 3.x y se actualiza con frecuencia en función de la rama principal de código abierto de Dynamo.

¿Qué paquetes o nodos estÔn disponibles en esta versión de Dynamo?

  • La mayorĆ­a de los nodos principales; consulte la siguiente sección para conocer algunas limitaciones especĆ­ficas.

  • Paquete DynamoFormaBeta para interactuar con la API de Forma.

  • VASA para voxelización/anĆ”lisis eficiente.

  • MeshToolKit para la manipulación de mallas. El Kit de herramientas de malla tambiĆ©n estĆ” disponible de forma predefinida a partir de Dynamo 3.4.

  • RefineryToolkit para algoritmos Ćŗtiles que permiten pruebas de conflictos, distancia de visualización, la ruta mĆ”s corta, isovistas, etc.

¿Qué debo tener en cuenta al escribir grÔficos para DaaS?

  • Los nodos de Python no funcionarĆ”n. Estos no se ejecutarĆ”n actualmente.

  • No se pueden utilizar paquetes personalizados.

  • La capa de interfaz de usuario/vista de los nodos de interfaz de usuario no se ejecutarĆ”. No prevemos que esto sea un problema con la funcionalidad principal, pero es recomendable tenerlo en cuenta si observa un error asociado a un nodo con la interfaz de usuario personalizada.

  • Las funciones solo para Windows no estarĆ”n operativas. Por ejemplo, si intenta utilizar el Registro de Windows o WPF, se producirĆ” un error.

  • No se cargarĆ”n las extensiones de vista.

  • Los nodos filesystem no resultarĆ”n muy Ćŗtiles. Todos los archivos a los que haga referencia en el equipo local no existirĆ”n cuando se ejecuten en DaaS.

  • Los nodos de interoperabilidad de Excel/DSOffice no funcionarĆ”n. DeberĆ­an funcionar los nodos de Open XML.

  • En general, las solicitudes de red no funcionarĆ”n, aunque podrĆ” realizar llamadas a la API de Forma.

¿Cómo se supone que voy a recordar todo eso? ¿Y si hay otros cambios?

  • En el futuro, tenemos la intención de proporcionar herramientas dentro de Dynamo para la versión de escritorio que facilitarĆ”n que el grĆ”fico se ejecute de la misma forma en ambos contextos.

¿CuÔnto cuesta esto?

  • Durante esta versión beta, no se cobrarĆ” el tiempo de cĆ”lculo.

¿Cómo empiezo?

Consulte la entrada del blog, la serie de YouTube o los ejemplos de la extensión de Forma para comenzar. Estos le guiarÔn a través de los siguientes procedimientos:

  • Obtención de acceso a Autodesk Forma

  • Instalación de DynamoFormaBeta para Dynamo en el escritorio y la extensión de Dynamo en Forma

  • Escritura del primer grĆ”fico

Seguridad

  • Tenga en cuenta que los grĆ”ficos compartidos se almacenan en Forma.

  • El tiempo mĆ”ximo de ejecución del grĆ”fico actual es inferior a 30 minutos. Este valor puede cambiar.

  • Las solicitudes de ejecución presentan una velocidad limitada, por lo que es posible que se produzcan errores si realiza muchas solicitudes de cĆ”lculo en un periodo demasiado corto.

Paquetes
Hilo de comentarios sobre el kit de herramientas de Civil 3D
Supercharge Your Dynamo Graph with Civil 3D Toolkit | Autodesk University
Hilo de comentarios sobre Camber
Computational modeling linear structure with Civil 3D, Revit & Dynamo CivilConnection | Autodesk University
Bridge Detailing 2.0: Computational modelling methods using Civil 3D, Revit & Dynamo | Autodesk University
Parametric modeling and automating the placement of Universal TBM Rings | Autodesk University
Hilo de comentarios sobre la biblioteca de nodos de Arkance Systems

¿Qué es un diccionario?

Dynamo 2.0 introduce el concepto de separación del tipo de datos del diccionario del tipo de datos de lista. Esta novedad puede conllevar algunos cambios importantes en la forma de crear y trabajar con datos en los flujos de trabajo. Antes de la versión 2.0, los diccionarios y las listas se combinaban como un tipo de datos. En resumen, las listas eran en realidad diccionarios con claves de enteros.

¿Qué es un diccionario?

Un diccionario es un tipo de datos compuesto por una colección de pares de clave-valor en los que cada clave es exclusiva para cada colección. Un diccionario no tiene orden y, bÔsicamente, se pueden "buscar elementos" mediante una clave en lugar de un valor de índice como en una lista. En Dynamo 2.0, las claves solo pueden ser cadenas.

¿Qué es una lista?

Una lista es un tipo de datos compuesto por un conjunto de valores ordenados. En Dynamo, las listas utilizan enteros como valores de Ć­ndice.

¿Por qué se ha realizado este cambio y en qué me afecta?

La separación de los diccionarios y las listas convierte a los diccionarios en componentes de primera clase que se pueden utilizar para almacenar y buscar valores de forma rÔpida y sencilla sin necesidad de recordar un valor de índice o mantener una estructura de listas estricta a lo largo del flujo de trabajo. Durante las pruebas realizadas por los usuarios, hemos detectado una reducción considerable del tamaño del grÔfico cuando se utilizaron los diccionarios en lugar de varios nodos GetItemAtIndex.

¿CuÔles son los cambios?

  • Se han producido cambios en la sintaxis que modifican el modo en que se inicializarĆ”n y se utilizarĆ”n los diccionarios y las listas en los bloques de código.

    • Los diccionarios utilizan la siguiente sintaxis: {key:value}.

    • Las listas utilizan la siguiente sintaxis: [value,value,value].

  • Se han introducido nuevos nodos en la biblioteca para ayudarle a crear, modificar y consultar diccionarios.

  • Las listas creadas con bloques de código v1.x se migrarĆ”n automĆ”ticamente al cargar la secuencia de comandos a la nueva sintaxis de lista que utiliza corchetes [ ] en lugar de llaves { }.



¿En qué me afecta? ¿Para qué se utilizan?

En las ciencias informÔticas, los diccionarios, al igual que las listas, son colecciones de objetos. Mientras que las listas se encuentran en un orden específico, los diccionarios son colecciones sin ordenar. No dependen de números secuenciales (índices), sino de claves.

En la imagen siguiente, se muestra un posible caso de uso de un diccionario. A menudo, los diccionarios se utilizan para relacionar dos segmentos de datos que podrían no tener una correlación directa. En este caso, conectamos la versión en español de una palabra a la versión en inglés para su posterior búsqueda.

  1. Cree un diccionario para relacionar los dos datos.

  2. Obtenga el valor con la clave especificada.

Biblioteca de nodos

Anteriormente, hemos mencionado que los nodos son los componentes bÔsicos de un grÔfico de Dynamo y que se organizan en grupos lógicos en la biblioteca. En Dynamo for Civil 3D, hay dos categorías (o estantes) de la biblioteca que contienen nodos específicos para trabajar con objetos de AutoCAD y Civil 3D, como alineaciones, perfiles, obras lineales, referencias a bloque, etc. El resto de la biblioteca contiene nodos de naturaleza mÔs genérica y coherentes entre todas las "versiones" de Dynamo (por ejemplo, Dynamo para Revit, Dynamo Sandbox, etc.).

Consulte la sección Biblioteca para obtener mÔs información sobre la organización de los nodos de la biblioteca principal de Dynamo.

La biblioteca de nodos de Dynamo for Civil 3D
  1. Nodos especĆ­ficos para trabajar con objetos de AutoCAD y Civil 3D

  2. Nodos de uso general

  3. Nodos de paquetes de terceros que se pueden instalar por separado

Al utilizar los nodos que se encuentran en los estantes de AutoCAD y Civil 3D, el grÔfico de Dynamo solo funcionarÔ en Dynamo for Civil 3D. Si se abre un grÔfico de Dynamo for Civil 3D en otra ubicación (por ejemplo, en Dynamo para Revit), estos nodos se marcarÔn con una advertencia y no se ejecutarÔn.

¿Por qué hay dos estantes independientes para AutoCAD y Civil 3D?

Esta organización distingue los nodos de los objetos nativos de AutoCAD (líneas, polilíneas, referencias a bloque, etc.) de los nodos de los objetos de Civil 3D (alineaciones, obras lineales, superficies, etc.). Desde el punto de vista técnico, AutoCAD y Civil 3D son dos componentes independientes; AutoCAD es la aplicación principal y Civil 3D se basa en ella.

JerarquĆ­a de nodos

Para trabajar con los nodos de AutoCAD y Civil 3D, es importante conocer a fondo la jerarquía de objetos dentro de cada estante. ¿Recuerda la taxonomía de la biología? Reino, phylum, clase, orden, familia, género y especie. Los objetos de AutoCAD y Civil 3D se organizan de forma similar. Veamos algunos ejemplos para explicarlo.

Objetos de Civil

Vamos a utilizar una alineación como ejemplo.

Supongamos que su objetivo es cambiar el nombre de la alineación. A partir de aquí, el siguiente nodo que añadiría es CivilObject.SetName.

Al principio, es posible que esto parezca algo lioso. ¿Qué es un CivilObject y por qué la biblioteca no tiene un nodo Alignment.SetName? La respuesta estÔ relacionada con la reutilización y la simplicidad. Si lo piensa, el proceso de cambio de nombre de un objeto de Civil 3D es el mismo tanto si se trata de una alineación, una obra lineal, un perfil o cualquier otro elemento. Por lo tanto, en lugar de tener nodos repetitivos que bÔsicamente hacen lo mismo (por ejemplo, Alignment.SetName, Corridor.SetName, Profile.SetName, etc.), sería conveniente asignar esa funcionalidad a un solo nodo. Eso es exactamente lo que hace CivilObject.SetName.

Otra forma de enfocar esto es en términos de relaciones. Una alineación y una obra lineal son tipos de objetos de Civil, del mismo modo que una manzana y una pera son tipos de fruta. Al igual que usa un único pelador para pelar tanto una manzana como una pera, los nodos de objetos de Civil se aplican a cualquier objeto de este tipo. ”Lo desordenada que estaría su cocina si tuviera un pelador distinto para cada tipo de fruta! En ese sentido, la biblioteca de nodos de Dynamo es igual que su cocina.

Objetos

Ahora, vamos a dar un paso mÔs allÔ. Supongamos que desea cambiar la capa de la alineación. Se utilizarÔ el nodo Object.SetLayer.

¿Por qué no hay un nodo denominado CivilObject.SetLayer? Aquí se aplican los mismos principios de reutilización y simplicidad que hemos analizado anteriormente. La propiedad layer es común a cualquier objeto de AutoCAD que se pueda dibujar o insertar, como una línea, una polilínea, texto, una referencia a bloque, etc. Los objetos de Civil 3D como alineaciones y obras lineales se encuentran en la misma categoría, por lo que cualquier nodo que se aplique a un objeto también se puede utilizar con cualquier objeto de Civil.

Generadores de puntos de Python

Las siguientes secuencias de comandos de Python generan matrices de puntos para varios ejemplos. Se deben pegar en un nodo Python Script, como se indica a continuación:

python_points_1

out_points = []

for i in range(11):
	sub_points = []
	for j in range(11):
		z = 0
		if (i == 5 and j == 5):
			z = 1
		elif (i == 8 and j == 2):
			z = 1
		sub_points.append(Point.ByCoordinates(i, j, z))
	out_points.append(sub_points)

OUT = out_points

python_points_2

out_points = []

for i in range(11):
	z = 0
	if (i == 2):
		z = 1
	out_points.append(Point.ByCoordinates(i, 0, z))

OUT = out_points

python_points_3

out_points = []

for i in range(11):
	z = 0
	if (i == 7):
		z = -1
	out_points.append(Point.ByCoordinates(i, 5, z))

OUT = out_points

python_points_4

out_points = []

for i in range(11):
	z = 0
	if (i == 5):
		z = 1
	out_points.append(Point.ByCoordinates(i, 10, z))

OUT = out_points

python_points_5

out_points = []

for i in range(11):
	sub_points = []
	for j in range(11):
		z = 0
		if (i == 1 and j == 1):
			z = 2
		elif (i == 8 and j == 1):
			z = 2
		elif (i == 2 and j == 6):
			z = 2
		sub_points.append(Point.ByCoordinates(i, j, z))
	out_points.append(sub_points)

OUT = out_points

¿Qué es un bloque de código?

Los bloques de código son una ventana a DesignScript, el lenguaje de programación que es la base de Dynamo. Creado desde cero para admitir flujos de trabajo de diseño exploratorios, DesignScript es un lenguaje legible y conciso que ofrece información inmediata a pequeños fragmentos de código y también se adapta a interacciones grandes y complejas. DesignScript también forma la columna vertebral del motor que impulsa la mayoría de los aspectos subyacentes de Dynamo. Como casi todas las funciones de los nodos y las interacciones de Dynamo tienen una relación de uno a uno con el lenguaje de creación de secuencias de comandos, se ofrecen oportunidades únicas de desplazarse entre secuencias de comandos e interacciones basadas en nodos de forma fluida.

Para los principiantes, los nodos se pueden convertir automÔticamente en sintaxis de texto para facilitar el aprendizaje de DesignScript o para reducir el tamaño de secciones de grÔficos de mayor tamaño. Esto se realiza mediante un proceso denominado "de nodo a código", que se describe con mÔs detalle en la sección Sintaxis de DesignScript. Los usuarios con mÔs experiencia pueden utilizar bloques de código para crear combinaciones personalizadas de funciones existentes y relaciones creadas por el usuario mediante una gran cantidad de paradigmas de codificación estÔndar. En un nivel intermedio entre los principiantes y los usuarios avanzados, hay disponibles un gran número de accesos directos y fragmentos de código que agilizarÔn los diseños. Si bien el término "bloque de código" puede intimidar un poco a los que no son programadores, es una herramienta eficaz y fÔcil de usar. Un principiante puede utilizar de forma eficaz el bloque de código con una mínima creación de código y un usuario avanzado puede establecer definiciones de secuencias de comandos que se pueden recuperar en cualquier parte de una definición de Dynamo.

Una breve descripción de los bloques de código

En resumen, los bloques de código son una interfaz de creación de secuencias de comandos de texto dentro de un entorno de creación de secuencias de comandos visuales. Se pueden utilizar como números, cadenas, fórmulas y otros tipos de datos. El bloque de código se ha diseñado para Dynamo, por lo que se pueden definir variables arbitrarias en el bloque de código y esas variables se añaden automÔticamente a las entradas del nodo:

Con los bloques de código, un usuario dispone de flexibilidad para decidir cómo especificar entradas. A continuación, se indican varias formas de crear un punto bÔsico con coordenadas (10, 5, 0):

A medida que aprende mÔs sobre las funciones disponibles en la biblioteca, es posible que le sea mÔs rÔpido escribir "Point.ByCoordinates" que buscar en la biblioteca y encontrar el nodo adecuado. Por ejemplo, al escribir "Point.", Dynamo mostrarÔ una lista de posibles funciones que aplicar a un punto. Esto hace que la creación de secuencias de comandos sea mÔs intuitiva y le ayudarÔ a aprender a aplicar funciones en Dynamo.

Creación de nodos de bloque de código

El bloque de código se encuentra en Core > Entrada > Acciones > Bloque de código. O, simplemente, de forma mÔs rÔpida, haga doble clic en el lienzo para que aparezca el bloque de código. Este nodo se utiliza con tanta frecuencia que se le han proporcionado privilegios completos de doble clic.

Números, cadenas y fórmulas

Los bloques de código también son flexibles en relación con los tipos de datos. El usuario puede definir rÔpidamente números, cadenas y fórmulas, y el bloque de código generarÔ la salida deseada.

En la imagen siguiente, puede comprobar que la forma tradicional de trabajo es algo prolija: el usuario busca el nodo previsto en la interfaz, lo añade al lienzo y, a continuación, introduce los datos. Con el bloque de código, el usuario puede hacer doble clic en el lienzo para desplegar el nodo y escribir el tipo de datos correcto con la sintaxis bÔsica.

Los nodos "number" y "string" son dos ejemplos de nodos de Dynamo que posiblemente estén obsoletos en comparación con el bloque de código.

  1. "Forma tradicional"

  2. Bloques de código

Operaciones booleanas geomƩtricas

Los métodos Intersect, Trim y SelectTrim se utilizan principalmente en geometrías dimensionales inferiores como puntos, curvas y superficies. Por otra parte, la geometría sólida cuenta con un conjunto adicional de métodos para modificar la forma después de su creación, tanto sustrayendo material de forma similar a Trim como combinando elementos para formar un todo mayor.

Unión

El método Union utiliza dos objetos sólidos para crear un único objeto sólido a partir del espacio cubierto por ambos objetos. El espacio solapado entre los objetos se combina en la forma final. Este ejemplo combina una esfera y un cubo en una forma de esfera-cubo sólida:

s1 = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

s2 = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(4, 0,
    0), 6);

combined = s1.Union(s2);

Diferencia

El método Difference, al igual que Trim, resta el contenido del sólido de la herramienta de entrada del sólido base. En este ejemplo, se extrae una pequeña hendidura de una esfera:

s = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

tool = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(10, 0,
    0), 6);

result = s.Difference(tool);

Intersecar

El método Intersect devuelve el sólido solapado entre dos entradas sólidas. En el siguiente ejemplo, Difference se ha cambiado a Intersect y el sólido resultante es el vacío que falta que se ha eliminado inicialmente:

s = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

tool = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(10, 0,
    0), 6);

result = s.Intersect(tool);

Recursos

Este manual de introducción es solo el comienzo de su andadura con Dynamo for Civil 3D. Hay una gran cantidad de conocimientos disponibles en la floreciente comunidad de usuarios de Dynamo. Eche un vistazo a algunos de estos recursos mientras continúa con su aprendizaje.

Ayuda de Civil 3D

Foro de Dynamo

Autodesk University

Manuales

Introducción a los nodos personalizados

Los nodos personalizados se crean mediante la anidación de otros nodos y nodos personalizados dentro de un "nodo personalizado de Dynamo", que podemos considerar conceptualmente como un contenedor. Cuando se ejecuta este nodo contenedor en el grÔfico, se ejecutarÔ todo lo que contiene para permitirle reutilizar y compartir una combinación útil de nodos.

Adaptación a los cambios

Cuando existen varias copias de un nodo personalizado en el grÔfico, puede actualizarlas todas mediante la edición del nodo personalizado base. Esto permite actualizar el grÔfico sin problemas adaptÔndolo a los cambios que puedan producirse en el flujo de trabajo o el diseño.

Uso compartido

Podría decirse que la mejor función de los nodos personalizados es su capacidad para compartir el trabajo. Si un "usuario avanzado" crea un grÔfico complejo de Dynamo y se lo entrega a un diseñador que no esté familiarizado con esta herramienta, este puede condensar el grÔfico a sus aspectos bÔsicos para interactuar con el diseño. El nodo personalizado se puede abrir para editar el grÔfico interno, pero manteniendo la simplicidad del "contenedor". Con este proceso, los nodos personalizados permiten a los usuarios de Dynamo diseñar un grÔfico limpio e intuitivo.

Muchos mƩtodos para crear un nodo

Hay una gran variedad de métodos para crear nodos personalizados en Dynamo. En los ejemplos de este capítulo, crearemos nodos personalizados directamente desde la interfaz de usuario de Dynamo. Si es un programador y estÔ interesado en el formato C# o Zero-Touch, puede consultar esta pÔgina en la pÔgina wiki de Dynamo para obtener una revisión mÔs detallada.

Entorno de nodos personalizados y creación del primer nodo personalizado

Pasemos al entorno de nodos personalizados y creemos un nodo sencillo para calcular un porcentaje. El entorno de nodos personalizados es diferente al entorno de grÔficos de Dynamo, pero la interacción es bÔsicamente la misma. Una vez señalado esto, crearemos nuestro primer nodo personalizado.

Para crear un nodo personalizado desde cero, inicie Dynamo y seleccione Nodo personalizado o pulse Ctrl + MayĆŗs + N en el lienzo.

Asigne un nombre, una descripción y una categoría en el cuadro de diÔlogo Propiedades de nodo personalizado.

  1. Nombre: porcentaje.

  2. Descripción: calcule el porcentaje de un valor en relación con otro.

  3. CategorĆ­a: Math.Functions.

Se abre un lienzo con un fondo de color amarillo, lo que indica que estƔ trabajando en un nodo personalizado. En este lienzo, tiene acceso a todos los nodos principales de Dynamo, asƭ como a los nodos Input y Output, que etiquetan los datos que entran en el nodo personalizado y salen de Ʃl. Se pueden encontrar en Entrada > BƔsico.

  1. Entradas: los nodos de entrada crean puertos de entrada en el nodo personalizado. La sintaxis de un nodo de entrada es nombre_entrada : tipo de datos = valor_por defecto(opcional).

  2. Salidas: son similares a las entradas; estas crearÔn puertos en el nodo personalizado y les asignarÔn un nombre. Considere la posibilidad de añadir un comentario personalizado a los puertos de entrada y salida para que se muestren como sugerencia en los tipos de entrada y salida. Esto se explica con mÔs detalle en la sección Creación de nodos personalizados.

Puede guardar este nodo personalizado como un archivo .dyf (en lugar de como un archivo .dyn estÔndar); este se añadirÔ automÔticamente a la sesión actual y futuras. EncontrarÔ el nodo personalizado en la sección Complementos de la biblioteca.

Avancemos

Ahora que hemos creado nuestro primer nodo personalizado, las secciones siguientes profundizarÔn en las funciones de los nodos personalizados y en la publicación de flujos de trabajo genéricos. En la siguiente sección, estudiaremos el desarrollo de un nodo personalizado que transfiere geometría de una superficie a otra.

Superficies

Superficies en Dynamo

¿Qué es una superficie?

Utilizamos una en el modelo para representar los objetos que vemos en nuestro mundo tridimensional. Aunque las curvas no siempre son planas, es decir, tridimensionales, el espacio que definen siempre estÔ vinculado a una dimensión. Las superficies nos ofrecen otra dimensión y un conjunto de propiedades adicionales que se pueden utilizar en otras operaciones de modelado.

Superficie en parƔmetro

Importe y evalúe una superficie en un parÔmetro de Dynamo para ver qué tipo de información se puede extraer.

  1. Surface.PointAtParameter devuelve el punto en una coordenada UV especificada.

  2. Surface.NormalAtParameter devuelve el vector normal en una coordenada UV especificada.

  3. Surface.GetIsoline devuelve la curva isoparamƩtrica en una coordenada U o V; observe la entrada de isoDirection.

Descargue los archivos de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Información mÔs detallada sobre...

Superficie

Una superficie es una forma matemÔtica definida por una función y dos parÔmetros; en lugar de t para las curvas, utilizamos U y V para describir el espacio de parÔmetros correspondiente. Esto significa que hay mÔs datos geométricos que dibujar cuando se trabaja con este tipo de geometría. Por ejemplo, las curvas tienen vectores y planos normales (que se pueden rotar o girar a lo largo de la longitud de la curva), mientras que las superficies tienen vectores normales y planos tangentes que serÔn coherentes en su orientación.

  1. Superficie

  2. Isocurva U

  3. Isocurva V

  4. Coordenada UV

  5. Plano perpendicular

  6. Vector normal

Dominio de superficie: un dominio de superficie se define como el rango de parÔmetros (U,V) que se evalúan en un punto tridimensional de esa superficie. El dominio de cada dimensión (U o V) se describe normalmente como dos números, de U mín. a U mÔx. y de V mín. a V mÔx.

Aunque la forma de la superficie puede no parecer "rectangular" y es posible que tenga un conjunto de isocurvas mƔs ajustadas o sueltas, el "espacio" definido por su dominio siempre es bidimensional. En Dynamo, se entiende que las superficies tienen un dominio definido por un mƭnimo de 0.0 y un mƔximo de 1.0 en las direcciones U y V. Las superficies planas o recortadas pueden tener dominios diferentes.

Isocurva (o curva isoparamétrica): curva definida por un valor U o V constante en la superficie y un dominio de valores para la otra dirección U o V correspondiente.

Coordenada UV: el punto del espacio del parƔmetro UV definido por U, V y, a veces, W.

Plano perpendicular: un plano perpendicular a las isocurvas U y V en una coordenada UV especificada.

Vector normal: un vector que define la dirección de "arriba" en relación con el plano perpendicular.

Superficies NURBS

Las superficies NURBS son muy similares a las curvas NURBS. Las superficies NURBS se pueden considerar como una rejilla de curvas NURBS que van en dos direcciones. La forma de una superficie NURBS se define mediante un nĆŗmero de puntos de control y el grado de esa superficie en las direcciones U y V. Se utilizan los mismos algoritmos para calcular la forma, las normales, las tangentes, las curvaturas y otras propiedades mediante puntos de control, grosores y grados.

En el caso de las superficies NURBS, la geometría indica dos direcciones, ya que las superficies NURBS son, independientemente de la forma que veamos, rejillas rectangulares de puntos de control. Y, aunque estas direcciones son a menudo arbitrarias en relación con el sistema de coordenadas universal, las utilizaremos frecuentemente para analizar los modelos o generar otra geometría en función de la superficie.

  1. Grado (U,V) = (3,3)

  2. Grado (U,V) = (3,1)

  3. Grado (U,V) = (1,2)

  4. Grado (U,V) = (1,1)

PolySurfaces

Las PolySurfaces se componen de superficies unidas a lo largo de una arista. Las PolySurfaces ofrecen mÔs de una definición de UV bidimensional, por lo que ahora podemos desplazarnos por las formas conectadas a través de su topología.

Aunque la "topología" describe normalmente un concepto sobre el modo en que las piezas estÔn conectadas o relacionadas, la topología en Dynamo es también un tipo de geometría. En concreto, es una categoría principal de superficies, PolySurfaces y sólidos.

En ocasiones denominadas parches, este modo de unión de superficies nos permite crear formas mÔs complejas y definir detalles a lo largo de la unión. De forma oportuna, podemos aplicar una operación de empalme o chaflÔn a las aristas de una PolySurface.

Casos de uso de Revit

¿Alguna vez ha deseado buscar algo en Revit mediante un segmento de datos incluido en la solución?

Si la respuesta es afirmativa, es probable que haya hecho algo similar a lo que aparece en el ejemplo siguiente.

En la imagen mostrada a continuación, recopilamos todas las habitaciones del modelo de Revit, obtenemos el índice de la habitación que deseamos (por número de habitación) y, por último, obtenemos la habitación en el índice.

  1. Recopile todas las habitaciones del modelo.

  2. Especifique el número de habitación que se va a buscar.

  3. Obtenga el número de habitación y busque el índice en el que se encuentra.

  4. Obtenga la habitación en el índice.

Ejercicio: diccionario de habitaciones

Parte I: creación de un diccionario de habitaciones

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Ahora vamos a recrear esta idea mediante diccionarios. Debemos recopilar primero todas las habitaciones de nuestro modelo de Revit.

  1. Seleccionamos la categorĆ­a de Revit con la que deseamos trabajar (en este caso, trabajaremos con habitaciones).

  2. Le indicamos a Dynamo que recopile todos esos elementos.

A continuación, debemos decidir las claves que vamos a utilizar para buscar estos datos. (La información sobre las claves se encuentra en la sección ).

  1. Los datos que usaremos son el número de habitación.

Ahora crearemos el diccionario con las claves y los elementos especificados.

  1. El nodo Dictionary.ByKeysValues crearĆ” un diccionario con las entradas correspondientes especificadas.

  2. Keys debe ser una cadena, mientras que values puede ser diversos tipos de objeto.

Por último, ahora podemos recuperar una habitación del diccionario con su número de habitación.

  1. String serĆ” la clave que utilizaremos para buscar un objeto en el diccionario.

  2. Dictionary.ValueAtKey obtendrĆ” ahora el objeto del diccionario.

Parte II: bĆŗsqueda de valores

Con esta misma lógica de diccionario, también podemos crear diccionarios con objetos agrupados. Si deseamos buscar todas las habitaciones en un nivel determinado, podemos modificar el grÔfico anterior de la siguiente manera.

  1. En lugar de utilizar el número de habitación como clave, ahora podemos utilizar un valor de parÔmetro (en este caso, utilizaremos nivel).

  1. Ahora podemos agrupar las habitaciones por el nivel en el que residen.

  1. Con los elementos agrupados por el nivel, ahora podemos utilizar las claves compartidas (claves exclusivas) como nuestra clave para el diccionario y las listas de habitaciones como elementos.

  1. Por último, mediante los niveles del modelo de Revit, podemos buscar en el diccionario las habitaciones que se encuentran en ese nivel. Dictionary.ValueAtKey utilizarÔ el nombre de nivel y devolverÔ los objetos de habitación presentes en ese nivel.

Las oportunidades de uso del diccionario son realmente infinitas. La capacidad de relacionar los datos de BIM de Revit con el propio elemento plantea diversos casos de uso.

Configuración de Dynamo

Dynamo como extensión frente a Dynamo Sandbox

Dynamo es un proyecto activo de desarrollo de código abierto. Obtenga la .

Iniciar Dynamo como extensión

Dynamo viene preinstalado en software como Revit3D, FormIt, Civil3D, etc.

Para empezar a utilizarlo, inícielo desde el panel de la barra de herramientas. Aunque su posición varía en función del software utilizado, el icono de inicio se suele encontrar en el menú > ficha Administrar. Haga clic en el icono de Dynamo para iniciarlo.

Para obtener mÔs información sobre el uso de Dynamo con un software específico, es recomendable consultar las siguientes secciones:

Si desea utilizar Dynamo como una aplicación independiente, siga leyendo para obtener instrucciones sobre cómo descargar Sandbox.

Obtener Dynamo Sandbox

Descargar

La aplicación Dynamo estÔ disponible en el . Tanto las versiones oficiales como las preliminares o las anteriores estÔn disponibles en la pÔgina de descarga. Visite la pÔgina y haga clic en Download para obtener la versión oficial publicada.

Si busca versiones anteriores o de desarrollo de "vanguardia", todas las versiones se pueden encontrar en la sección inferior de la misma pÔgina.

El desarrollo de "vanguardia" puede incluir algunas funciones nuevas y experimentales que aún no se han probado completamente, por lo que pueden ser inestables. Al utilizar esta opción, puede detectar errores o problemas y ayudarnos a mejorar la aplicación informando de los problemas a nuestro equipo.

Se recomienda a los principiantes que descarguen la versión estable oficial.

Descomprimir

Antes de iniciar la versión que haya descargado, deberÔ descomprimir el contenido en la carpeta que desee.

Descargue e instale en el equipo para este paso.

Haga clic con el botón derecho en el archivo ZIP y seleccione Extraer todo.

Elija un destino para descomprimir todos los archivos.

Inicio

En la carpeta de destino, haga doble clic en DynamoSandbox.exe para iniciarlo.

AparecerÔ la pantalla de inicio de Dynamo Sandbox, como se muestra a continuación.

Enhorabuena, ya ha finalizado la configuración para utilizar Dynamo Sandbox.

La función Geometría es una característica adicional de Dynamo Sandbox disponible únicamente para los usuarios que tengan una licencia o una suscripción actuales a las siguientes soluciones de software de Autodesk: Revit, Robot Structural Analysis, FormIt y Civil 3D. La función Geometría permite a los usuarios importar, crear, editar y exportar geometría desde Dynamo Sandbox.

Enlace de objetos

Dynamo for Civil 3D contiene un mecanismo muy eficaz para "recordar" los objetos que crea cada nodo. Este mecanismo se denomina Enlace de objetos y permite que un grÔfico de Dynamo genere resultados coherentes cada vez que se ejecuta en el mismo documento. Aunque esto es muy deseable en muchas situaciones, hay otras en las que es posible que desee tener mÔs control sobre el comportamiento de Dynamo. Esta sección le ayudarÔ a comprender cómo funciona el enlace de objetos y cómo puede aprovecharlo.

Ejemplo

Observe este grƔfico que crea un cƭrculo en el espacio modelo de la capa actual.

Observe lo que sucede cuando se cambia el radio.

Esto es un enlace de objetos en acción. El comportamiento por defecto de Dynamo es modificar el radio del círculo en lugar de crear un nuevo círculo cada vez que se modifica la entrada del radio. Esto se debe a que el nodo Object.ByGeometry "recuerda" que crea este círculo específico cada vez que se ejecuta el grÔfico. AdemÔs, Dynamo guardarÔ esta información para que la próxima vez que abra el documento de Civil 3D y ejecute el grÔfico, este presente exactamente el mismo comportamiento.

Otro ejemplo

Veamos un ejemplo en el que puede que desee cambiar el comportamiento por defecto de enlace de objetos de Dynamo. Supongamos que desea crear un grƔfico que coloque texto en el centro de un cƭrculo. Sin embargo, lo que pretende con este grƔfico es que pueda ejecutarse una y otra vez, y colocar cada vez un nuevo texto para cualquier Cƭrculo que se seleccione. Este es el aspecto que presentarƭa el grƔfico.

Sin embargo, esto es lo que sucede realmente cuando se selecciona un cĆ­rculo diferente.

Parece que el texto se suprime y se vuelve a crear con cada ejecución del grÔfico. En realidad, la posición del texto se modifica en función del círculo seleccionado. Por lo tanto, es el mismo texto, solo que en un lugar diferente. Para crear un nuevo texto cada vez, debemos modificar la configuración de enlace de objetos de Dynamo para que no se conserve ningún dato de enlace (consulte a continuación).

Tras realizar ese cambio, obtenemos el comportamiento que buscamos.

ParƔmetros de enlace

Dynamo for Civil 3D permite modificar el comportamiento por defecto de enlace de objetos a través de los parÔmetros de Almacenamiento de datos de enlace en el menú de Dynamo.

Tenga en cuenta que las opciones de almacenamiento de datos de enlace estƔn disponibles en Civil 3D 2022.1 y versiones posteriores.

Todas las opciones estÔn activadas por defecto. A continuación, se resumen las acciones de cada opción.

Opción 1: No se conservan datos de enlace

Si esta opción estÔ activada, Dynamo "olvidarÔ" los objetos que creó la última vez que se ejecutó el grÔfico. De este modo, el grÔfico puede ejecutarse en cualquier dibujo y situación, y crearÔ nuevos objetos cada vez.

CuÔndo utilizar esta opción

Utilice esta opción cuando desee que Dynamo "olvide" todo lo que ha realizado en ejecuciones anteriores y cree nuevos objetos cada vez.

Opción 2: Guardar en el grÔfico para Dynamo

Esta opción permite serializar los metadatos de enlace de objetos en el grÔfico (archivo .dyn) al guardarlo. Si cierra o vuelve a abrir el grÔfico y lo ejecuta en el mismo dibujo, todo debería funcionar igual que lo dejó. Si ejecuta el grÔfico en un dibujo diferente, los datos de enlace se eliminarÔn del grÔfico y se crearÔn nuevos objetos. Esto significa que, si abre el dibujo original y vuelve a ejecutar el grÔfico, se crearÔn nuevos objetos, ademÔs de los antiguos.

CuÔndo utilizar esta opción

Utilice esta opción cuando desee que Dynamo "recuerde" los objetos que creó la última vez que se ejecutó en un dibujo específico.

Esta opción es la mÔs adecuada para situaciones en las que es posible mantener una relación de 1:1 entre un dibujo específico y un grÔfico de Dynamo. Las opciones 1 y 3 son mÔs idóneas para grÔficos diseñados para ejecutarse en varios dibujos.

Opción 3: Guardar en dibujo para Dynamo

Es similar a la opción 2, salvo que los datos de enlace de objetos se serializan en el dibujo en lugar de en el grÔfico (archivo .dyn). Si cierra o vuelve a abrir el grÔfico y lo ejecuta en el mismo dibujo, todo debería funcionar igual que lo dejó. Si ejecuta el grÔfico en un dibujo diferente, los datos de enlace se conservan en el dibujo original, ya que se guardan en el dibujo y no en el grÔfico.

CuÔndo utilizar esta opción

Utilice esta opción cuando desee utilizar el mismo grÔfico en varios dibujos y conseguir que Dynamo "recuerde" lo que realizó en cada uno de ellos.

Opción 4: Guardar en dibujo para el Reproductor de Dynamo

Lo primero que hay que tener en cuenta con esta opción es que no afecta al modo en que el grÔfico interactúa con el dibujo cuando se ejecuta el grÔfico a través de la interfaz principal de Dynamo. Esta opción solo se aplica cuando el grÔfico se ejecuta con el Reproductor de Dynamo.

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección .

Si ejecuta el grÔfico mediante la interfaz principal de Dynamo y, a continuación, cierra y ejecuta el mismo grÔfico mediante el Reproductor de Dynamo, este crearÔ nuevos objetos sobre los que creó anteriormente. Sin embargo, una vez que el Reproductor de Dynamo haya ejecutado el grÔfico una vez, serializarÔ los datos de enlace de objetos en el dibujo. Por lo tanto, si ejecuta el grÔfico varias veces a través del Reproductor de Dynamo, este actualizarÔ los objetos en lugar de crear otros nuevos. Si ejecuta el grÔfico a través del Reproductor de Dynamo en un dibujo diferente, los datos de enlace seguirÔn conservÔndose en el dibujo original, ya que se guardan en el dibujo y no en el grÔfico.

CuÔndo utilizar esta opción

Utilice esta opción cuando desee ejecutar un grÔfico con el Reproductor de Dynamo en varios dibujos y que este "recuerde" lo que realizó en cada uno de ellos.

Caso real de paquete: Kit de herramientas de malla

El Kit de herramientas de malla de Dynamo proporciona herramientas para importar mallas desde formatos de archivo externos, crear una malla a partir de objetos de geometría de Dynamo y generar manualmente mallas mediante sus vértices e índices. La biblioteca también proporciona herramientas para modificar y reparar mallas, o extraer cortes horizontales para su uso en la fabricación.

El Kit de herramientas de malla de Dynamo forma parte de la investigación de mallas en curso de Autodesk y, como tal, seguirÔ creciendo a lo largo de los próximos años. Esperamos que aparezcan con frecuencia nuevos métodos en este kit y no dude en ponerse en contacto con el equipo de Dynamo para ofrecer comentarios, indicar errores y enviar sugerencias sobre las nuevas funciones.

Mallas frente a sólidos

En el siguiente ejercicio, se muestran algunas operaciones bÔsicas de malla que utiliza el Kit de herramientas de malla. En el ejercicio, intersecamos una malla con una serie de planos, lo que puede ser muy costoso desde una perspectiva computacional si se utilizan sólidos. A diferencia de los sólidos, las mallas tienen una "resolución" establecida y no se definen matemÔticamente, sino topológicamente, y podemos definir esta resolución en función de la tarea que se estÔ llevando a cabo. Para obtener mÔs información sobre las relaciones entre mallas y sólidos, puede consultar el capítulo de este manual de introducción. Para examinar de forma mÔs exhaustiva el Kit de herramientas de malla, consulte la . Pasemos al paquete en el ejercicio siguiente.

Instalar el Kit de herramientas de malla

En Dynamo, vaya a Paquetes > Package Manager en la barra de menús superior. En el campo de búsqueda, escriba "MeshToolkit", todo en una sola palabra. Haga clic en Instalar y acepte las confirmaciones para iniciar la descarga. Así de fÔcil.

Ejercicio: intersección de malla

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

En este ejemplo, examinaremos el nodo Intersect del Kit de herramientas de malla. Importaremos una malla y la intersecaremos con una serie de planos de entrada para crear cortes. Este es el punto inicial de la preparación del modelo para la fabricación en una herramienta de corte lÔser o por chorro de agua, o un dispositivo de fresado CNC.

Abra primero Mesh-Toolkit_Intersect-Mesh.dyn in Dynamo.

  1. File Path: busque el archivo de malla que desea importar (stanford_bunny_tri.obj). Los tipos de archivo admitidos son .mix y .obj.

  2. Mesh.ImportFile: conecte la ruta de archivo para importar la malla.

  1. Point.ByCoordinates: cree un punto; este serĆ” el centro de un arco.

  2. Arc.ByCenterPointRadiusAngle: cree un arco alrededor del punto. Esta curva se utilizarÔ para colocar una serie de planos. __ La configuración es la siguiente: __ radius: 40, startAngle: -90, endAngle:0.

Cree una serie de planos orientados a lo largo del arco.

  1. Code Block: cree 25 nĆŗmeros entre 0 y 1.

  2. Curve.PointAtParameter: conecte el arco a la entrada "curve" y la salida de bloque de código a la entrada "param" para extraer una serie de puntos a lo largo de la curva.

  3. Curve.TangentAtParameter: conecte las mismas entradas que en el nodo anterior.

  4. Plane.ByOriginNormal: conecte los puntos a la entrada "origin" y los vectores a la entrada "normal" para crear una serie de planos en cada punto.

A continuación, utilizaremos estos planos para intersecar la malla.

  1. Mesh.Intersect: interseque los planos con la malla importada, creando una serie de contornos de PolyCurve. Haga clic con el botón derecho en el nodo y defina el encaje como el mÔs largo.

  2. PolyCurve.Curves: divida las PolyCurves en fragmentos de curva.

  3. Curve.EndPoint: extraiga los puntos finales de cada curva.

  4. NurbsCurve.ByPoints: utilice los puntos para crear una NurbsCurve. Utilice un nodo booleano establecido en True (verdadero) para cerrar las curvas.

Antes de continuar, desactive la vista preliminar de algunos de los nodos, como Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal y Arc.ByCenterPointRadiusAngle para ver mejor el resultado.

  1. Surface.ByPatch: cree parches de superficie para cada contorno con el fin de crear "cortes" de la malla.

Añada un segundo conjunto de cortes para obtener un efecto de gofre/cartón de huevos.

Es posible que se haya dado cuenta de que las operaciones de intersección se calculan de forma mÔs rÔpida con una malla que con un sólido comparable. Los flujos de trabajo como el que se muestra en este ejercicio son excelentes para trabajar con mallas.

La conexión con Civil 3D

Dynamo for Civil 3D lleva el paradigma de la programación visual a los ingenieros y los diseñadores que trabajan en proyectos de infraestructuras civiles. Puede pensar en Dynamo como una especie de "navaja suiza" digital para los usuarios de Civil 3D; sea cual sea la tarea, dispone de la herramienta adecuada para el trabajo. Su intuitiva interfaz le permite crear rutinas eficaces y personalizables sin necesidad de escribir una sola línea de código. No necesita ser programador para utilizar Dynamo, pero sí debe ser capaz de pensar con la lógica de un programador. Junto con los demÔs capítulos del manual de introducción, este le ayudarÔ a desarrollar sus habilidades lógicas para que pueda abordar cualquier tarea con una mentalidad de diseño computacional.

Historia

Dynamo se introdujo por primera vez en Civil 3D 2020 y ha seguido evolucionando desde entonces. En un principio, se instalaba por separado mediante una actualización de software, pero ahora viene incluido con todas las versiones de Civil 3D. En función de la versión de Civil 3D que esté utilizando, es posible que observe que la interfaz de Dynamo presenta un aspecto ligeramente distinto al de los ejemplos que aparecen en este capítulo. Esto se debe a que se ha realizado una revisión significativa de la interfaz en Civil 3D 2023.

Es recomendable que consulte el para obtener la información mÔs actualizada sobre el desarrollo de esta herramienta. En la tabla siguiente, se resumen los principales hitos en la trayectoria de Dynamo for Civil 3D.

Versión de Civil 3D
Versión de Dynamo
Notas

Configurar Dynamo Player en Forma

Para utilizar Dynamo con Forma, tiene estas dos opciones: puede usar Dynamo como servicio (DaaS) basado en la nube o la versión de escritorio de Dynamo. Cada una tiene sus ventajas en función de lo que desee hacer, así que antes de empezar, considere la opción que mejor se adapte a sus necesidades. Sin embargo, tenga en cuenta que puede alternar entre estas opciones en cualquier momento.

Comparación entre Dynamo como servicio y la versión de escritorio de Dynamo

Dynamo como servicio
Versión de escritorio

En esta pÔgina, explicaremos cómo configurar ambas opciones.

Configuración de Dynamo como servicio

Dynamo en Forma estÔ disponible actualmente como versión beta abierta de acceso anticipado, lo que significa que las funciones y la interfaz de usuario pueden cambiar con frecuencia.

En primer lugar, instalaremos Dynamo Player en Forma.

  1. En el sitio de Forma, vaya a Extensions en el barra lateral izquierda y haga clic en Add extension. Se abre el sitio web de Autodesk App Store.

  2. Busque Dynamo y añada la versión beta de Dynamo Player. Lea la limitación de responsabilidades y haga clic en Agree.

  1. Dynamo Player estƔ ahora disponible en sus extensiones. Haga clic en Ʃl para abrirlo.

  2. Ya puede utilizar Dynamo Player.

Configuración de la versión de escritorio de Dynamo

Para utilizar la versión de escritorio de Dynamo, necesitarÔ Dynamo, ya sea como Sandbox independiente o conectado a Revit o Civil 3D. También necesitarÔ el paquete DynamoForma.

Revit

Siga estas instrucciones para configurar Dynamo en Revit y el paquete DynamoForma.

  1. Asegúrese de tener instalado Revit 2024.1 o una versión posterior.

  2. Abra Dynamo en Revit mediante Gestionar > Dynamo.

  3. En Dynamo, instale el paquete DynamoForma. Vaya a Paquetes > Package Manager y, a continuación, busque DynamoForma.

    1. Si dispone de Revit 2024, instale el paquete DynamoForma for 2.x.

    2. Si dispone de Revit 2025, instale el paquete DynamoForma.

Civil 3D

Siga estas instrucciones para configurar Dynamo en Civil 3D y el paquete DynamoForma.

  1. Asegúrese de tener instalado Civil 3D 2024.1 o una versión posterior.

  2. Abra Dynamo en Civil 3D mediante Gestionar > Dynamo.

  3. En Dynamo, instale el paquete DynamoForma. Vaya a Paquetes > Package Manager y, a continuación, busque DynamoForma.

    1. Si dispone de Civil 3D 2024, instale el paquete DynamoForma for 2.x.

    2. Si dispone de Civil 3D 2025, instale el paquete DynamoForma.

Dynamo Sandbox

Siga estas instrucciones para instalar Dynamo Sandbox y el paquete DynamoForma.

  1. Descargue Dynamo 2.18.0 o superior desde las . Para obtener la mejor experiencia, elija la última de las versiones mÔs estables, que aparece en la parte superior.

    1. Las versiones diarias son versiones de desarrollo y pueden incluir funciones incompletas o en curso.

  2. Extraiga Dynamo mediante en la carpeta que elija.

  3. Ejecute DynamoSandbox.exe desde la carpeta de instalación de Dynamo.

  4. En Dynamo, instale el paquete DynamoForma. Vaya a Paquetes > Package Manager y, a continuación, busque DynamoForma.

    1. Si dispone de Dynamo 2.x, instale el paquete DynamoForma for 2.x.

    2. Si dispone de Dynamo 3.x, instale el paquete DynamoForma.

Una vez que Dynamo esté instalado, podrÔ utilizarlo con Forma. Al ejecutar la opción de escritorio de Dynamo en Forma, deberÔ tener Dynamo abierto para poder utilizar la extensión de Dynamo Player.

Acceso a la versión de escritorio en Forma

En primer lugar, instalaremos Dynamo Player en Forma.

  1. En el sitio de Forma, vaya a Extensions en el barra lateral izquierda y haga clic en Add extension. Se abre el sitio web de Autodesk App Store.

  2. Busque Dynamo y añada la versión beta de Dynamo Player. Lea la limitación de responsabilidades y haga clic en Agree.

  1. Dynamo Player estƔ ahora disponible en sus extensiones. Haga clic en Ʃl para abrirlo.

  2. En la parte superior, haga clic en Desktop para acceder a la versión de escritorio de Dynamo.

  1. Ya puede utilizar Dynamo Player. Si ya tiene un grƔfico abierto en Dynamo, haga clic en "Open" debajo de Connected graph para verlo en el Reproductor.

superficie
3KB
Surfaces.zip
archive
Open
Superficie
Superficie
Coordenada de superficie
Superficie NURBS
Superficie NURBS
PolySurface
12KB
roomDictionary.dyn
Open
¿Qué es un diccionario?
Geometrƭa para el diseƱo computacional
pƔgina wiki de Dynamo
159KB
MeshToolkit.zip
archive
Open

2024.1

2.18

2024

2.17

Actualización de la interfaz de usuario del Reproductor de Dynamo

2023.2

2.15

2023

2.13

Actualización de la interfaz de usuario de Dynamo

2022.1

2.12

  • Adición de la configuración de almacenamiento de datos de enlace de objetos

  • Nuevos nodos para controlar el enlace de objetos

2022

2.10

  • Incorporación en la instalación principal de Civil 3D

  • Transición de IronPython a Python.NET

2021

2.5

2020.2

2.4

2020 Update 2

2.4

Nuevos nodos aƱadidos

2020.1

2.2

2020

2.1

Lanzamiento inicial

blog de Dynamo
Interfaz de Dynamo, Civil 3D 2020 - 2022
Interfaz de Dynamo, Civil 3D 2023 - presente

FÔcil configuración.

Proceso de instalación en varios pasos.

No es necesario instalar Dynamo ni tenerlo abierto.

Es necesario tener abierto Dynamo.

No reconoce un grƔfico que ya se haya abierto en Dynamo

Abra un grÔfico en el Reproductor que ya se haya abierto en Dynamo con solo hacer clic en un botón.

No se puede utilizar Python.

Se puede utilizar Python.

Solo se pueden utilizar paquetes autorizados.

Se puede utilizar cualquier paquete.

compilaciones de Dynamo
7zip
lista de software compatible con Dynamo
Dynamo para Revit
Dynamo for Civil 3D
sitio web de Dynamo
Get Dynamo
7zip
Reproductor de Dynamo
Un grÔfico sencillo para la creación de un círculo
Modificación de la entrada de radio en Dynamo
Un grƔfico sencillo que coloca el texto en el centro del cƭrculo seleccionado
Comportamiento por defecto de Dynamo al seleccionar un nuevo cĆ­rculo
ParƔmetros de enlace de objetos
Comportamiento con el enlace de objetos desactivado
Enlace de objetos

Interfaz de usuario

Descripción general de la interfaz de usuario

La interfaz de usuario (IU) de Dynamo se organiza en cinco regiones principales. Aquí se ofrecerÔ una breve descripción general; analizaremos mÔs detalladamente el espacio de trabajo y la biblioteca en las siguientes secciones.

  1. MenĆŗs

  2. Barra de herramientas

  3. Biblioteca

  4. Espacio de trabajo

  5. Barra de ejecución

MenĆŗs

A continuación, se indican los menús de las funciones bÔsicas de la aplicación Dynamo. Al igual que la mayoría del software de Windows, los dos primeros menús estÔn relacionados con la administración de archivos, las operaciones de selección y la edición de contenido. El resto de los menús son mÔs específicos de Dynamo.

MenĆŗs de Dynamo

La información general y la configuración se pueden encontrar en el menú desplegable Dynamo.

  1. Acerca de: descubra la versión de Dynamo instalada en el equipo.

  2. Acuerdo para recopilar datos de uso: esta opción le permite elegir compartir sus datos de usuario a fin de mejorar Dynamo.

  3. Preferencias: incluye parÔmetros como, por ejemplo, la definición de la precisión del separador decimal de la aplicación y la calidad de renderización de la geometría.

  4. Salir de Dynamo

Ayuda

Si no sabe cómo continuar, consulte el menú de Ayuda. Puede acceder a uno de los sitios web de referencia de Dynamo a través del navegador de Internet.

  1. Guƭas interactivas: recorridos que le guiarƔn paso a paso por diversas funciones de Dynamo.

  2. Muestras: archivos de ejemplo de referencia. Solo estÔn disponibles en programas anfitrión, incluidos Revit y Civil 3D.

  3. Diccionario de Dynamo: recurso con documentación sobre todos los nodos.

  4. Sitio web de Dynamo: sitio web para obtener información sobre Dynamo y vínculos a recursos como el foro, el blog, etc.

  5. Repositorio de Dynamo: consulte el proyecto de Dynamo en GitHub.

  6. Wiki del proyecto Dynamo: visite la pÔgina wiki para obtener información sobre el desarrollo mediante la API de Dynamo con bibliotecas y herramientas.

  7. Mostrar pƔgina de inicio: regrese a la pƔgina de inicio de Dynamo cuando se encuentre en un documento.

  8. Informar de un error: abra una incidencia en GitHub.

Barra de herramientas

La barra de herramientas de Dynamo contiene una serie de botones para acceder rÔpidamente a los archivos, así como a los comandos Deshacer (Ctrl + Z) y Rehacer (Ctrl + Y). En el extremo derecho, hay otro botón que exporta una instantÔnea del espacio de trabajo, lo que resulta muy útil para la documentación y el uso compartido.

  • Nuevo: cree un nuevo archivo .dyn.

  • Abrir: abra un archivo .dyn existente (espacio de trabajo) o un archivo .dyf (nodo personalizado).

  • Guardar/Guardar como: guarde el archivo .dyn o .dyf activo.

  • Deshacer: deshaga la Ćŗltima acción.

  • Rehacer: rehaga la siguiente acción.

  • Exportar espacio de trabajo como imagen: exporte el espacio de trabajo visible como un archivo PNG.

Biblioteca

La biblioteca de Dynamo es una colección de bibliotecas funcionales; cada una de ellas contiene nodos agrupados por categorías. Consta de bibliotecas bÔsicas que se añaden durante la instalación por defecto de Dynamo. A medida que sigamos describiendo su uso, mostraremos cómo ampliar la funcionalidad bÔsica con nodos personalizados y paquetes adicionales. En la sección Biblioteca, se ofrecerÔ información mÔs detallada sobre cómo utilizarla.

Espacio de trabajo

El espacio de trabajo es el lugar en el que se crean los programas visuales; también puede cambiar su parÔmetro Vista preliminar para ver las geometrías 3D desde aquí. Para obtener mÔs información, consulte Espacio de trabajo.

Barra de ejecución

Ejecute la secuencia de comandos de Dynamo desde aquí. Haga clic en el icono desplegable del botón de ejecución para cambiar entre los distintos modos.

  • AutomĆ”tico: ejecuta la secuencia de comandos automĆ”ticamente. Los cambios se actualizan en tiempo real.

  • Manual: la secuencia de comandos solo se ejecuta cuando se hace clic en el botón "Ejecutar". Este modo es Ćŗtil para realizar cambios en secuencias de comandos complejas y de gran tamaƱo.

  • Periódica: esta opción estĆ” atenuada por defecto. Solo estĆ” disponible cuando se utiliza el nodo DateTime.Now. Puede establecer el grĆ”fico para que se ejecute automĆ”ticamente en el intervalo especificado.

Descripción general de la geometría

GeometrĆ­a en Dynamo Sandbox

La geometría es el idioma del diseño. Cuando un lenguaje o un entorno de programación tienen un núcleo de geometría, podemos descubrir las posibilidades del diseño de modelos precisos y sólidos, la automatización de las rutinas de diseño y la creación de iteraciones de diseño con algoritmos.

Conocer los tipos de geometría y cómo se relacionan nos permitirÔ desplazarnos por la colección de nodos de geometría disponibles en la biblioteca. Los nodos de geometría se organizan alfabéticamente en lugar de jerÔrquicamente; aquí se muestran de forma similar a su presentación en la interfaz de Dynamo.

AdemÔs, la creación de modelos en Dynamo y la conexión de la vista preliminar de lo que aparece en la vista preliminar en segundo plano al flujo de datos del grÔfico deberían ser procesos mÔs intuitivos con el tiempo.

  1. Observe el supuesto sistema de coordenadas renderizado por la rejilla y los ejes coloreados.

  2. Los nodos seleccionados renderizarƔn la geometrƭa correspondiente (si el nodo crea la geometrƭa) en segundo plano con el color resaltado.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

4KB
Geometry for Computational Design - Geometry Overview.dyn
Open

El concepto de geometrĆ­a

La geometría se define tradicionalmente como el estudio de la forma, el tamaño y la posición relativa de las figuras y las propiedades del espacio. Este campo tiene una historia muy rica que se remonta a miles de años. Con la llegada y la popularización de la informÔtica, disponemos de una poderosa herramienta para definir, explorar y generar geometría. Ahora es muy fÔcil calcular el resultado de interacciones geométricas complejas y lo hacemos de forma casi transparente.

Conejito de Stanford

Si tiene curiosidad por comprobar lo diversa y compleja que puede ser la geometría mediante la potencia de su ordenador, realice una búsqueda rÔpida en la web del conejito de Stanford (o "Stanford Bunny"), un modelo canónico que se utiliza para probar algoritmos.

Comprender la geometrƭa en el contexto de los algoritmos, la informƔtica y la complejidad puede parecer una tarea abrumadora. Sin embargo, existen algunos principios clave y relativamente sencillos que podemos establecer como base para empezar a crear aplicaciones mƔs avanzadas:

  1. La geometrĆ­a se compone de datos: para el ordenador y Dynamo, un conejito no se diferencia mucho de un nĆŗmero.

  2. La geometría se basa en la abstracción: sobre todo, los elementos geométricos se describen mediante números, relaciones y fórmulas dentro de un sistema de coordenadas espacial específico.

  3. La geometrĆ­a tiene una jerarquĆ­a: los puntos se combinan para crear lĆ­neas, las lĆ­neas se unen para crear superficies, etc.

  4. La geometrƭa describe simultƔneamente la parte y el todo: cuando tenemos una curva, se tiene en cuenta tanto la forma como todos los posibles puntos a lo largo de ella.

En la prÔctica, estos principios nos indican que debemos tener en cuenta con qué tipo de geometría estamos trabajando (qué tipo de geometría, cómo se creó, etc.) para poder crear, descomponer y recomponer de forma fluida diferentes geometrías a medida que desarrollamos modelos mÔs complejos.

Recorrido por la jerarquĆ­a

Dediquemos un momento a observar la relación entre las descripciones abstractas y jerÔrquicas de la geometría. Como estos dos conceptos estÔn relacionados, pero esto no es siempre evidente al principio, podemos encontrarnos rÔpidamente con un bloqueo conceptual una vez que empezamos a desarrollar flujos de trabajo o modelos mÔs profundos. Para empezar, vamos a usar la dimensionalidad como un sencillo descriptor del "material" que modelamos. El número de dimensiones necesarias para describir una forma nos muestra cómo organizar la forma en que la geometría se organiza jerÔrquicamente.

GeometrĆ­a computacional
  1. Un punto (definido por coordenadas) no tiene ninguna dimensión asociada; son solo números que describen cada coordenada.

  2. Una línea (definida por dos puntos) tiene ahora una dimensión; podemos "recorrer" la línea hacia delante (dirección positiva) o hacia atrÔs (dirección negativa).

  3. Un plano (definido por dos lƭneas) tiene dos dimensiones: es posible desplazarse mƔs a la izquierda o mƔs a la derecha.

  4. Un cubo (definido por dos planos) tiene tres dimensiones: se puede definir una posición hacia arriba o hacia abajo.

La dimensionalidad es un método prÔctico para empezar a organizar en categorías la geometría, pero no es necesariamente el mejor. Después de todo, no modelamos solo puntos, líneas, planos y cuadros, ¿qué ocurre si deseo utilizar un elemento curvado? AdemÔs, existe toda una categoría adicional de tipos geométricos que son totalmente abstractos; por ejemplo, definen propiedades como la orientación, el volumen o las relaciones entre las partes. No podemos realmente agarrar un vector, así que, ¿cómo lo definimos en relación con lo que vemos en el espacio? Una categorización mÔs detallada de la jerarquía geométrica debería incluir la diferencia entre los tipos abstractos o "ayudas", que podemos agrupar por lo que ayudan a hacer, y los tipos que ayudan a describir la forma de los elementos del modelo.

JerarquĆ­a de geometrĆ­a

Uso de la geometrĆ­a para ir al siguiente nivel

La creación de modelos en Dynamo no se limita a lo que se puede generar con nodos. A continuación, se indican algunas formas clave para llevar el proceso al siguiente nivel con la geometría:

  1. Dynamo permite importar archivos: pruebe a utilizar un archivo CSV para nubes de puntos o SAT para incorporar superficies.

  2. Al trabajar con Revit, podemos hacer referencia a los elementos de Revit que se utilizarƔn en Dynamo.

  3. Dynamo Package Manager ofrece funciones adicionales para operaciones y tipos de geometrĆ­a ampliados; consulte el paquete de Kit de herramientas de malla.

Sólidos

Sólidos en Dynamo

¿Qué es un sólido?

Si deseamos crear modelos mÔs complejos que no se puedan crear a partir de una única superficie o si queremos definir un volumen explícito, debemos aventurarnos en el terreno de los sólidos (y las PolySurfaces). Incluso un cubo sencillo es lo suficientemente complejo como para necesitar seis superficies, una por cara. Los sólidos proporcionan acceso a dos conceptos clave que las superficies no ofrecen: una descripción topológica mÔs refinada (caras, aristas y vértices) y operaciones booleanas.

Operación booleana para crear un sólido de bola llena de puntas

Puede utilizar operaciones booleanas para modificar sólidos. Vamos a utilizar algunas operaciones booleanas para crear una bola llena de puntas.

  1. Sphere.ByCenterPointRadius: cree el sólido base.

  2. Topology.Faces, Face.SurfaceGeometry: consulte las caras del sólido y conviértalas en geometría de superficie; en este caso, la esfera solo tiene una cara.

  3. Cone.ByPointsRadii: cree conos mediante puntos en la superficie.

  4. Solid.UnionAll: una los conos y la esfera.

  5. Topology.Edges: consulte las aristas del nuevo sólido.

  6. Solid.Fillet: empalme las aristas de la bola llena de puntas.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

8KB
Geometry for Computational Design - Solids.dyn
Open

Bloqueo

Las operaciones booleanas son complejas y pueden resultar lentas de calcular. Puede utilizar la función "Bloquear" para suspender la ejecución de nodos seleccionados y nodos descendentes afectados.

  1. Utilice el menú contextual para bloquear la operación de unión de sólidos.

  2. El nodo seleccionado y todos los nodos descendentes se previsualizan en modo atenuado con un color gris claro y los cables afectados se muestran como líneas continuas. La vista preliminar de la geometría afectada también se mostrarÔ atenuada. Ahora puede cambiar los valores ascendentes sin calcular la unión booleana.

  3. Para desbloquear los nodos, haga clic con el botón derecho y desactive la opción Bloquear.

  4. Todos los nodos afectados y las vistas preliminares de la geometrƭa asociada se actualizarƔn y se restablecerƔn al modo de vista preliminar estƔndar.

Puede obtener mÔs información sobre cómo bloquear nodos en la sección Nodos y cables.

Información mÔs detallada sobre...

Sólidos

Los sólidos constan de una o varias superficies que contienen volumen a partir de un contorno cerrado que define lo que estÔ "dentro" o "fuera". Independientemente de cuÔntas superficies haya, estas deben formar un volumen "hermético" para que se considere un sólido. Los sólidos se pueden crear mediante la unión de superficies o PolySurfaces, o mediante operaciones como, por ejemplo, solevación, barrido y revolución. Las primitivas de esfera, cubo, cono y cilindro también son sólidos. Un cubo con al menos una cara eliminada se considera una PolySurface, que tiene algunas propiedades similares, pero no es un sólido.

Sólidos
  1. Un plano estÔ compuesto por una única superficie y no es un sólido.

  2. Una esfera estÔ formada por una única superficie, pero es un sólido.

  3. Un cono estÔ formado por dos superficies unidas para crear un sólido.

  4. Un cilindro estÔ formado por tres superficies unidas para crear un sólido.

  5. Un cubo estÔ formado por seis superficies unidas para crear un sólido.

TopologĆ­a

Los sólidos se componen de tres tipos de elementos: vértices, aristas y caras. Las caras son las superficies que conforman el sólido. Las aristas son las curvas que definen la conexión entre las caras adyacentes y los vértices son los puntos inicial y final de esas curvas. Estos elementos se pueden consultar mediante los nodos de topología.

TopologĆ­a
  1. Caras

  2. Aristas

  3. VƩrtices

Operaciones

Los sólidos se pueden modificar mediante empalmes o achaflanados de sus aristas para eliminar esquinas y Ôngulos agudos. La operación de chaflÔn crea una superficie reglada entre dos caras, mientras que un empalme se fusiona entre las caras para mantener la tangencia.

  1. Cubo sólido

  2. Cubo achaflanado

  3. Cubo empalmado

Operaciones booleanas

Las operaciones booleanas de sólidos son métodos para combinar dos o mÔs sólidos. Una única operación booleana implica realmente la realización de cuatro operaciones:

  1. Interseque dos o mƔs objetos.

  2. DivĆ­dalos en las intersecciones.

  3. Suprima las partes no deseadas de la geometrĆ­a.

  4. Una todo de nuevo.

De este modo, las operaciones booleanas de sólidos permiten ahorrar mucho tiempo. Existen tres operaciones booleanas de sólidos que distinguen las partes de la geometría que se conservan.

  1. Unión: elimine las partes que se solapan de los sólidos y únalas en un único sólido.

  2. Diferencia: reste un sólido a otro. El sólido que se va a restar se conoce como herramienta. Tenga en cuenta que puede cambiar el sólido que serÔ la herramienta para conservar el volumen inverso.

  3. Intersección: conserve solo el volumen de intersección de los dos sólidos.

AdemÔs de estas tres operaciones, Dynamo incluye los nodos Solid.DifferenceAll y Solid.UnionAll para realizar operaciones de diferencia y unión con varios sólidos.

  1. UnionAll: operación de unión con esfera y conos orientados hacia fuera.

  2. DifferenceAll: operación de diferencia con esfera y conos orientados hacia dentro.

Curvas

Curvas en Dynamo

¿Qué es una curva?

Las curvas son el primer tipo de datos geométricos abordado que presenta un conjunto mÔs familiar de propiedades descriptivas de forma... ¿Qué grado de curvatura o rectitud? ¿Cómo de larga o corta? Recuerde que los puntos siguen siendo nuestros bloques de construcción para definir cualquier elemento, desde una línea a una spline y todos los tipos de curva intermedios.

Tipos de curva
  1. LĆ­nea

  2. PolilĆ­nea

  3. Arco

  4. CĆ­rculo

  5. Elipse

  6. Curva NURBS

  7. PolyCurve

LĆ­nea

Una lƭnea estƔ formada por un conjunto de puntos; cada lƭnea tiene al menos dos puntos. Una de las formas mƔs habituales de crear lƭneas en Dynamo es utilizar Line.ByStartPointEndPoint.

Curva NURBS

NURBS es un modelo que se utiliza para representar curvas y superficies con precisión. Una curva de seno en Dynamo mediante dos métodos diferentes para crear curvas NURBS a fin de comparar los resultados.

  1. NurbsCurve.ByControlPoints utiliza la lista de puntos como puntos de control.

  2. NurbsCurve.ByPoints dibuja una curva a travƩs de la lista de puntos.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

5KB
Geometry for Computational Design - Curves.dyn
Open

Información mÔs detallada sobre...

Curvas

El término curva suele ser un comodín para todo tipo de formas curvas (incluso aunque adopten un aspecto recto). La curva en su sentido primordial es la categorización principal de todos estos tipos de forma: líneas, círculos, splines, etc. Desde una perspectiva mÔs técnica, una curva describe cada punto posible que se puede encontrar introduciendo "t" en un conjunto de funciones, que pueden ir desde la sencilla función (x = -1.26*t, y = t) hasta funciones que implican cÔlculo. Independientemente del tipo de curva con el que trabajemos, este parÔmetro denominado "t" es una propiedad que se puede evaluar. AdemÔs, independientemente del aspecto de la forma, todas las curvas tienen también un punto inicial y un punto final, que se alinean de forma coincidente con los valores t mínimo y mÔximo utilizados para crear la curva. Esto también nos ayuda a comprender su direccionalidad.

ParƔmetro de curva

Es importante tener en cuenta que Dynamo presupone que el dominio de los valores "t" de una curva se entiende como de 0.0 a 1.0.

Todas las curvas tambiƩn poseen una serie de propiedades o caracterƭsticas que se pueden utilizar para describirlas o analizarlas. Cuando la distancia entre los puntos inicial y final es cero, la curva es "cerrada". AdemƔs, cada curva tiene varios puntos de control; si todos estos puntos se encuentran en el mismo plano, la curva es "plana". Algunas propiedades se aplican a la curva como un todo, mientras que otras solo se aplican a puntos especƭficos a lo largo de la curva. Por ejemplo, la planaridad es una propiedad global, mientras que un vector tangente en un valor t especificado es una propiedad local.

LĆ­neas

Las lƭneas son la forma mƔs sencilla de las curvas. Puede que no parezcan curvadas, pero en realidad son curvas, solo que no tienen ninguna curvatura. Existen varias formas diferentes de crear lƭneas; la mƔs intuitiva desde el punto A al punto B. La forma de la lƭnea AB se dibujarƔ entre los puntos, pero matemƔticamente se extiende infinitamente en ambas direcciones.

LĆ­nea

Cuando conectamos dos líneas, tenemos una polilínea. Aquí tenemos una representación directa de lo que es un punto de control. Si se edita cualquiera de estas ubicaciones de punto, cambiarÔ la forma de la polilínea. Si la polilínea estÔ cerrada, se trata de un polígono. Si todas las longitudes de arista del polígono son iguales, se describe como normal.

PolilĆ­nea + PolĆ­gono

Arcos, cĆ­rculos, arcos elĆ­pticos y elipses

A medida que se añade mÔs complejidad a las funciones paramétricas que definen una forma, podemos ir un poco mÔs allÔ de la línea y crear un arco, un círculo, un arco elíptico o una elipse mediante la descripción de uno o dos radios. Las diferencias entre la versión de arco y el círculo o la elipse se encuentran en si la forma estÔ cerrada o no.

Arcos + cĆ­rculos

NURBS + PolyCurves

NURBS (Non-uniform Rational Basis Splines, splines de base racionales no uniformes) son representaciones matemÔticas que pueden modelar con precisión cualquier forma, desde líneas, círculos, arcos o rectÔngulos bidimensionales sencillos a la curva orgÔnica tridimensional de forma libre mÔs compleja. Gracias a su flexibilidad (hay relativamente pocos puntos de control, aunque la interpolación suave se basa en parÔmetros de grado) y su precisión (vinculada a complejas operaciones matemÔticas), los modelos NURBS se pueden utilizar en cualquier proceso, desde la ilustración y la animación hasta la fabricación.

Curva NURBS

Grado: el grado de la curva determina el rango de influencia que los puntos de control tienen en una curva; cuanto mayor sea el grado, mayor serĆ” el rango. El grado es un nĆŗmero entero positivo. Este nĆŗmero suele ser 1, 2, 3 o 5, pero puede ser cualquier nĆŗmero entero positivo. Las lĆ­neas y las polilĆ­neas NURBS suelen ser de grado 1 y la mayorĆ­a de las curvas de forma libre son de grado 3 o 5.

Puntos de control: los puntos de control son una lista de puntos de al menos grado+1. Una de las formas mƔs fƔciles de cambiar la forma de una curva NURBS es desplazar sus puntos de control.

Grosor: los puntos de control tienen un nĆŗmero asociado denominado grosor. Los grosores son normalmente nĆŗmeros positivos. Cuando todos los puntos de control de una curva tienen el mismo grosor (normalmente, 1), la curva se denomina no racional; de lo contrario, la curva se denomina racional. La mayorĆ­a de las curvas NURBS son no racionales.

Nudos: los nudos son una lista de números (grado+N-1), donde N es el número de puntos de control. Los nudos se utilizan junto con los grosores para controlar la influencia de los puntos de control en la curva resultante. Por ejemplo, los nudos se pueden utilizar para crear puntos de torsión en determinados puntos de la curva.

Grado de curva NURBS
  1. Grado = 1

  2. Grado = 2

  3. Grado = 3

Tenga en cuenta que cuanto mayor sea el valor de grado, mƔs puntos de control se utilizarƔn para interpolar la curva resultante.

Mallas

Mallas en Dynamo

¿Qué es una malla?

En el campo del modelado computacional, las mallas son una de las formas mÔs generalizadas de representación de la geometría 3D. Por lo general, la geometría de malla se compone de una colección de cuadrilÔteros o triÔngulos; puede ser una alternativa ligera y flexible al trabajo con NURBS. Las mallas se utilizan en todo, desde la renderización y las visualizaciones hasta la fabricación digital y la impresión en 3D.

Elementos de malla

Dynamo define mallas mediante una estructura de datos de cara-vƩrtice. En su nivel mƔs bƔsico, esta estructura es simplemente un conjunto de puntos que se agrupan en polƭgonos. Los puntos de una malla se denominan vƩrtices, mientras que los polƭgonos similares a superficies se denominan caras.

Para crear una malla, se necesita una lista de vértices y un sistema de agrupación de esos vértices en caras denominado grupo de índice.

  1. Lista de vƩrtices

  2. Lista de grupos de Ć­ndice para definir caras

Kit de herramientas de malla

Las funciones de malla de Dynamo se pueden ampliar mediante la instalación del paquete de Kit de herramientas de malla. El Kit de herramientas de malla de Dynamo proporciona herramientas para importar mallas desde formatos de archivo externos, crear una malla a partir de objetos de geometría de Dynamo y generar manualmente mallas mediante sus vértices e índices.

La biblioteca también proporciona herramientas para modificar y reparar mallas, o extraer cortes horizontales para su uso en la fabricación.

Consulte los casos reales del Kit de herramientas de malla para obtener un ejemplo de cómo utilizar este paquete.

Kit de herramientas de malla

Información mÔs detallada sobre...

Malla

Una malla es un conjunto de cuadrilÔteros y triÔngulos que representa una superficie o una geometría sólida. Al igual que los sólidos, la estructura de un objeto de malla incluye vértices, aristas y caras. Existen propiedades adicionales que hacen que las mallas sean únicas como, por ejemplo, las normales.

Elementos de malla
  1. VƩrtices de malla.

  2. Aristas de malla

    1. Las aristas con una única cara adyacente se denominan "desnudas". El resto de aristas estÔn "vestidas".

  3. Caras de malla.

VƩrtices + normales de vƩrtice

Los vértices de una malla son simplemente una lista de puntos. El índice de los vértices es muy importante al crear una malla u obtener información sobre la estructura de una malla. Para cada vértice, también existe una normal de vértice (vector) correspondiente que describe la dirección media de las caras enlazadas y ayuda a comprender la orientación de "entrada" y "salida" de la malla.

VƩrtices + normales
  1. VƩrtices

  2. Normales de vƩrtice

Caras

Una cara es una lista ordenada de tres o cuatro vértices. Por lo tanto, la representación de la "superficie" de una cara de malla se deduce en función de la posición de los vértices que se estÔn indexando. Ya tenemos la lista de vértices que componen la malla, por lo que, en lugar de proporcionar puntos individuales para definir la malla, solo tenemos que usar el índice de los vértices. Esto también nos permite utilizar el mismo vértice en mÔs de una cara.

  1. Una cara cuadrƔtica compuesta por los ƭndices 0, 1, 2 y 3.

  2. Una cara triangular creada con los Ć­ndices 1, 4 y 2. Tenga en cuenta que se puede cambiar el orden de los grupos de Ć­ndice; siempre que la secuencia se ordene en el sentido contrario a las agujas del reloj, la cara se definirĆ” correctamente.

Mallas frente a superficies NURBS

¿En qué se diferencia la geometría de malla de la geometría NURBS? ¿CuÔndo es recomendable utilizar una en lugar de la otra?

Parametrización

En un capítulo anterior, vimos que las superficies NURBS se definen mediante una serie de curvas NURBS que se dirigen en dos direcciones. Estas direcciones se etiquetan como U y V, y permiten que una superficie NURB se parametrice de acuerdo con un dominio de superficie bidimensional. Las curvas propiamente dichas se almacenan como ecuaciones en el ordenador, lo que permite calcular las superficies resultantes con un grado de precisión arbitrariamente pequeño. Sin embargo, puede ser difícil combinar varias superficies NURBS. La unión de dos superficies NURBS genera una PolySurface, donde las distintas secciones de la geometría tendrÔn diferentes parÔmetros UV y definiciones de curva.

Puntos de control
  1. Superficie

  2. Curva isoparamƩtrica (lƭnea isoparamƩtrica)

  3. Punto de control de superficie

  4. PolĆ­gono de control de superficie

  5. Punto isomƩtrico

  6. Marco de superficie

  7. Malla

  8. Arista desnuda

  9. Red de malla

  10. Aristas de malla

  11. Normal de vƩrtice

  12. Cara de malla/normal de cara de malla

Por otra parte, las mallas estÔn formadas por un número específico de caras y vértices definidos exactamente. La red de vértices no se puede definir normalmente mediante coordenadas UV sencillas, y como las caras son independientes, la cantidad de precisión se incorpora en la malla y solo se puede cambiar mediante el ajuste preciso de la malla y la adición de mÔs caras. La falta de descripciones matemÔticas permite que las mallas gestionen con mayor flexibilidad geometrías complejas dentro de una única malla.

Influencia local frente a global

Otra diferencia importante es la extensión en la que un cambio local en la geometría de malla o NURBS afecta a toda la forma. El desplazamiento de un vértice de una malla solo afecta a las caras adyacentes a ese vértice. En las superficies NURBS, la extensión de la influencia es mÔs complicada y depende del grado de la superficie, así como de los grosores y los nudos de los puntos de control. Sin embargo, por lo general, al desplazar un único punto de control en una superficie NURBS, se produce un cambio mÔs suave y extensivo en la geometría.

Edición
  1. Superficie NURBS: el desplazamiento de un punto de control tiene una influencia que se extiende a lo largo de la forma.

  2. Geometrƭa de malla: el desplazamiento de un vƩrtice solo influye en los elementos adyacentes.

Una analogía que puede resultar útil es comparar una imagen vectorial (compuesta de líneas y curvas) con una imagen rÔster (compuesta de píxeles individuales). Si amplía la vista de una imagen vectorial, las curvas permanecen nítidas y claras, mientras que si se amplía la vista de una imagen rÔster, los píxeles individuales aumentan de tamaño. En esta analogía, las superficies NURBS se pueden comparar con una imagen vectorial porque existe una relación matemÔtica fluida, mientras que una malla se comporta de forma similar a una imagen rÔster con una resolución establecida.

Desarrollo de un paquete

Dynamo ofrece una gran variedad de métodos para crear un paquete para uso personal o para compartir con la comunidad de Dynamo. En el caso real incluido a continuación, veremos cómo se configura un paquete mediante la desconstrucción de uno existente. Este caso real se basa en las lecciones del capítulo anterior y proporciona un conjunto de nodos personalizados para la asignación de geometría, mediante coordenadas UV, de una superficie de Dynamo a otra.

Paquete MapToSurface

Vamos a trabajar con un paquete de ejemplo que demuestra la asignación de UV de puntos de una superficie a otra. Ya hemos aprendido los conceptos bÔsicos de la herramienta en la sección Creación de un nodo personalizado de este manual de introducción. Los archivos siguientes muestran cómo podemos utilizar el concepto de asignación de UV y desarrollar un conjunto de herramientas para una biblioteca publicable.

En esta imagen, se asigna un punto de una superficie a otra mediante coordenadas UV. El paquete se basa en este concepto, pero con una geometrƭa mƔs compleja.

Instalación del paquete

En el capítulo anterior, exploramos métodos para panelizar una superficie en Dynamo según las curvas definidas en el plano XY. Este caso real amplía estos conceptos a mÔs dimensiones de la geometría. Vamos a instalar este paquete como se creó para mostrar cómo se ha desarrollado. En la siguiente sección, mostraremos cómo se ha publicado este paquete.

En Dynamo, haga clic en Paquetes > Package Manager y busque el paquete "MapToSurface" (todo en una sola palabra). Haga clic en Instalar para iniciar la descarga y aƱada el paquete a la biblioteca.

Después de la instalación, los nodos personalizados deben estar disponibles en la sección Complementos > DynamoPrimer.

Con el paquete instalado, veamos cómo se configura.

Nodos personalizados

El paquete que estamos creando utiliza cinco nodos personalizados que hemos creado como referencia. Veamos qué hace cada nodo a continuación. Algunos nodos personalizados se basan en otros nodos personalizados y los grÔficos tienen un diseño que los demÔs usuarios pueden comprender con total claridad.

Este es un paquete sencillo con cinco nodos personalizados. En los pasos siguientes, hablaremos brevemente de la configuración de cada nodo personalizado.

PointsToSurface

Se trata de un nodo personalizado bÔsico en el que se basan los demÔs nodos de asignación. En pocas palabras, el nodo asigna un punto desde una coordenada UV de la superficie de origen a la ubicación de la coordenada UV de la superficie de destino. Como los puntos son la geometría mÔs primitiva, a partir de la cual se genera geometría mÔs compleja, podemos utilizar esta lógica para asignar geometría 2D e incluso geometría 3D de una superficie a otra.

PolygonsToSurface

La lógica de ampliar puntos asignados de geometría 1D a geometría 2D se muestra aquí de forma sencilla con polígonos. Observe que se ha anidado el nodo "PointsToSurface" en este nodo personalizado. De esta forma, podemos asignar los puntos de cada polígono a la superficie y, a continuación, volver a generar el polígono a partir de los puntos asignados. Si se mantiene la estructura de datos correcta (una lista de listas de puntos), se pueden mantener los polígonos separados después de reducirlos a un conjunto de puntos.

NurbsCrvtoSurface

Aquí se aplica la misma lógica que en el nodo "PolygonsToSurface". En lugar de asignar puntos poligonales, asignamos puntos de control de una curva NURBS.

OffsetPointsToSurface

Este nodo es un poco mƔs complejo, pero el concepto es simple. Como el nodo "PointsToSurface", este nodo asigna puntos de una superficie a otra. Sin embargo, tambiƩn considera los puntos que no se encuentran en la superficie de origen inicial, obtiene su distancia al parƔmetro UV mƔs cercano y asigna esta distancia a la normal de la superficie de destino en la coordenada UV correspondiente. Esto se ve con mayor claridad al examinar los archivos de ejemplo.

SampleSrf

Se trata de un nodo simple que crea una superficie paramƩtrica para asignar de la rejilla de origen a una superficie ondulada en los archivos de ejemplo.

Archivos de ejemplo

Los archivos de ejemplo se pueden encontrar en la carpeta raĆ­z del paquete. Haga clic en Package Manager > ficha Paquetes instalados.

Junto a MapToSurface, haga clic en el menĆŗ de puntos verticales > Mostrar directorio raĆ­z.

A continuación, abra la carpeta "extra", que aloja todos los archivos del paquete que no son nodos personalizados. Aquí es donde se almacenan los archivos de ejemplo (si existen) de los paquetes de Dynamo. Las capturas de pantalla que se muestran a continuación explican los conceptos demostrados en cada archivo de ejemplo.

01-PanelingWithPolygons

Este archivo de ejemplo muestra cómo se puede utilizar "PointsToSurface" para panelizar una superficie en función de una rejilla de rectÔngulos. Esto debería resultarle familiar, ya que hicimos una demostración de un flujo de trabajo similar en el capítulo anterior.

02-PanelingWithPolygons-II

Mediante un flujo de trabajo similar, este archivo de ejercicio muestra una configuración para la asignación de círculos (o polígonos que representan círculos) de una superficie a otra. Utiliza el nodo "PolygonsToSurface".

03-NurbsCrvsAndSurface

Este archivo de ejemplo añade cierta complejidad al trabajar con el nodo "NurbsCrvToSurface". La superficie de destino se desfasa una distancia dada y la curva NURBS se asigna a la superficie de destino original y a la superficie de desfase. A partir de ahí, las dos curvas asignadas se solevan para crear una superficie que, a continuación, se engrosa. Este sólido resultante tiene una ondulación que es representativa de las normales de la superficie de destino.

04-PleatedPolysurface-OffsetPoints

Este archivo de ejemplo muestra cómo asignar una PolySurface plegada de una superficie de origen a una superficie de destino. Las superficies de origen y de destino son superficies rectangulares que abarcan la rejilla y una superficie de revolución, respectivamente.

La PolySurface de origen asignada desde la superficie de origen a la superficie de destino.

05-SVG-Import

Dado que los nodos personalizados pueden asignar diferentes tipos de curvas, este Ćŗltimo archivo hace referencia a un archivo SVG exportado de Illustrator y asigna las curvas importadas a una superficie de destino.

Mediante el anƔlisis de la sintaxis de un archivo .svg, las curvas se trasladan del formato .xml a PolyCurves de Dynamo.

Las curvas importadas se asignan a una superficie de destino. Esto nos permite diseñar de forma explícita (señalar y hacer clic) una panelización en Illustrator, importarla en Dynamo y aplicarla a una superficie de destino.

Edición

Una característica útil de Dynamo es la posibilidad de editar parÔmetros en un nivel paramétrico. Por ejemplo, se puede utilizar un algoritmo generativo o los resultados de una simulación para controlar los parÔmetros de una matriz de elementos. De este modo, un conjunto de ejemplares de la misma familia puede tener propiedades personalizadas en el proyecto de Revit.

ParƔmetros de tipo y ejemplar

Exercise
  1. Los parÔmetros de ejemplar definen la apertura de los paneles en la superficie de la cubierta, desde una proporción de apertura de 0,1 a 0,4.

  2. Los parƔmetros basados en tipo se aplican a todos los elementos de la superficie porque son del mismo tipo de familia. El material de cada panel, por ejemplo, puede controlarse mediante un parƔmetro basado en tipo.

Ejercicio
  1. Si ha configurado una familia de Revit con anterioridad, recuerde que debe asignar un tipo de parÔmetro (cadena, número, cota, etc.). Asegúrese de utilizar el tipo de datos correcto al asignar parÔmetros de Dynamo.

  2. También puede utilizar Dynamo en combinación con restricciones paramétricas definidas en las propiedades de una familia de Revit.

Como revisión rÔpida de los parÔmetros en Revit, recordemos que existen parÔmetros de tipo y parÔmetros de ejemplar. Ambos se pueden editar en Dynamo, pero trabajaremos con parÔmetros de ejemplar en el ejercicio siguiente.

A medida que descubra la amplia aplicación de la edición de parÔmetros, puede que desee editar una gran cantidad de elementos en Revit con Dynamo. Esta puede ser una operación computacionalmente exigente, lo que significa que puede ser lenta. Si va a editar un gran número de elementos, puede usar la función de nodo "Bloquear" para poner en pausa la ejecución de operaciones de Revit mientras desarrolla el grÔfico. Para obtener mÔs información sobre el bloqueo de nodos, consulte la sección "Bloqueo" del capítulo sobre sólidos.

Unidades

A partir de la versión 0.8, Dynamo prÔcticamente no trabaja con unidades. Esto permite que Dynamo siga siendo un entorno de programación visual abstracto. Los nodos de Dynamo que interactúan con las cotas de Revit harÔn referencia a las unidades del proyecto de Revit. Por ejemplo, si configura un parÔmetro de longitud en Revit desde Dynamo, el número del valor en Dynamo se corresponderÔ con las unidades por defecto del proyecto de Revit. El siguiente ejercicio utiliza metros.

Para obtener una conversión rÔpida de unidades, utilice el nodo "Convert Between Units". Esta es una herramienta prÔctica para convertir unidades de longitud, Ôrea y volumen sobre la marcha.

Ejercicio

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

5MB
Revit-Editing.zip
archive
Open

En el siguiente ejercicio, se utilizan metros.

Este ejercicio se centra en la edición de elementos de Revit sin realizar operaciones geométricas en Dynamo. No vamos a importar la geometría de Dynamo aquí, solo vamos a editar los parÔmetros de un proyecto de Revit. Este ejercicio es bÔsico; para los usuarios mÔs avanzados de Revit, observe que se trata de parÔmetros de ejemplar de una masa, pero la misma lógica se puede aplicar a una matriz de elementos para personalizarlos a gran escala. Esto se realiza con el nodo "Element.SetParameterByName".

Edición de parÔmetros de masa de edificio

Empiece con el archivo de ejemplo de Revit para esta sección. Hemos eliminado los elementos estructurales y las vigas de celosía adaptativas de la sección anterior. En este ejercicio, nos centraremos en una manipulación paramétrica en Revit y en la manipulación en Dynamo.

Al seleccionar el edificio dentro de Masa en Revit, vemos una matriz de parƔmetros de ejemplar en el panel Propiedades.

En Dynamo, podemos recuperar los parÔmetros mediante la selección del elemento de destino.

  1. Seleccione la masa de construcción con el nodo "Select Model Element".

  2. Se pueden consultar todos los parƔmetros de esta masa mediante el nodo "Element.Parameters". Esto incluye los parƔmetros de tipo y ejemplar.

  1. Consulte el nodo Element. Parameters para buscar los parÔmetros de destino. También podemos ver el panel Propiedades del paso anterior para elegir los nombres de parÔmetro que deseamos editar. En este caso, buscamos los parÔmetros que afectan a los grandes movimientos geométricos en la masa de construcción.

  2. Realizaremos cambios en el elemento de Revit mediante el nodo Element.SetParameterByName.

  3. Utilice un bloque de código para definir una lista de parÔmetros con cada elemento entre comillas para indicar una cadena. También podemos utilizar el nodo List.Create con una serie de nodos "string" conectados a varias entradas, pero el uso de un bloque de código es mÔs rÔpido y sencillo. Asegúrese de que la cadena coincida con el nombre exacto de Revit teniendo en cuenta mayúsculas y minúsculas: {"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};.

  1. TambiƩn vamos a designar valores para cada parƔmetro. AƱada seis "controles deslizantes de enteros" al lienzo y cambie el nombre de estos al parƔmetro correspondiente de la lista. Asimismo, defina los valores de cada control deslizante a los que se pueden ver en la imagen anterior. Por orden de arriba a abajo: 62,92,25,22,8,12.

  2. Defina otro bloque de código con una lista de la misma longitud que los nombres de parÔmetro. En este caso, se asignan nombres a las variables (sin comillas) que crean entradas para el bloque de código. Conecte los controles deslizantes a cada entrada respectiva: {bw,bl,bh,ao,io,lu};

  3. Conecte el bloque de código a la entrada de valor "Element.SetParameterByName"*. Con la opción Ejecutar automÔticamente seleccionada, veremos los resultados automÔticamente.

* Esta demostración funciona con parÔmetros de ejemplar, pero no con parÔmetros de tipo.

Al igual que en Revit, muchos de estos parÔmetros dependen unos de otros. Por supuesto, existen combinaciones en las que la geometría se puede partir. Podemos solucionar este problema con las fórmulas definidas en las propiedades de los parÔmetros, o bien podemos configurar una lógica similar con operaciones matemÔticas en Dynamo (este es un reto adicional si desea ampliar el ejercicio).

  1. Esta combinación proporciona un nuevo diseño con estilo a la masa de construcción: 100, 92, 100, 25, 13, 51.

Edición de parÔmetros de fachada

A continuación, veamos cómo podemos editar la fachada mediante un proceso similar.

  1. Copie el grƔfico y cƩntrese en la cristalera de la fachada que alojarƔ el sistema de vigas de celosƭa. En este caso, se aƭslan cuatro parƔmetros: {"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};.

  2. AdemÔs, creamos controles deslizantes de número y les cambiamos el nombre por los parÔmetros adecuados. Los tres primeros controles deslizantes empezando por arriba deben asignarse de nuevo a un dominio de [0,10], mientras que el control deslizante final, "Facade Bend Location", se debe asignar de nuevo a un dominio de [0,1]. Estos elementos, de arriba a abajo, deben empezar con los valores siguientes: 2,68, 2,64, 2,29, 0,5.

  3. Defina un nuevo bloque de código y conecte los controles deslizantes: {so,mo,no,fbl};.

  1. Al cambiar los controles deslizantes en esta parte del grƔfico, podemos hacer que la cristalera de la fachada sea mucho mƔs sustancial: 9,98, 10,0, 9,71, 0,31.

Publicación de un paquete

En las secciones anteriores, examinamos cómo se configura el paquete de MapToSurface con nodos personalizados y archivos de ejemplo. Pero, ¿cómo publicamos un paquete que se ha desarrollado localmente? En este caso real, se muestra cómo publicar un paquete a partir de un conjunto de archivos en una carpeta local.

Hay muchas formas de publicar un paquete. A continuación, se indica el proceso recomendado: publique localmente, desarrolle localmente y, a continuación, publique en línea. Comenzaremos con una carpeta que contiene todos los archivos del paquete.

Desinstalación de un paquete

Antes de pasar a la publicación del paquete MapToSurface, si ha instalado el paquete en una lección anterior, desinstÔlelo para que no trabaje con paquetes idénticos.

Vaya primero a Paquetes > Package Manager > ficha Paquetes instalados > junto a MapToSurface, haga clic en el menĆŗ de puntos verticales > Suprimir.

A continuación, reinicie Dynamo. Al volver a abrirlo, cuando active la ventana "Gestionar paquetes", MapToSurface ya no debería aparecer. Ya estamos listos para empezar desde el principio.

Publicación local de un paquete

Puede publicar nodos y paquetes personalizados desde Dynamo Sandbox en la versión 2.17 y posteriores, siempre que no presenten dependencias de la API del anfitrión. En versiones anteriores, la publicación de nodos y paquetes personalizados solo estaba activada en Dynamo for Revit y Dynamo para Civil 3D.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

27KB
MapToSurface.zip
archive
Open

Este es el primer envĆ­o del paquete y se han incluido todos los nodos personalizados y los archivos de ejemplo en una Ćŗnica carpeta. Con esta carpeta preparada, ya podemos realizar la carga en Dynamo Package Manager.

  1. Esta carpeta contiene cinco nodos personalizados (.dyf).

  2. Esta carpeta también contiene cinco archivos de ejemplo (.dyn) y un archivo de vectores importado (.svg). Estos archivos se utilizarÔn como ejercicios de introducción para mostrar al usuario cómo trabajar con los nodos personalizados.

En Dynamo, haga clic primero en Paquetes > Package Manager > ficha Publicar paquete nuevo.

En la ficha Publicar un paquete, rellene los campos correspondientes en el lado izquierdo de la ventana.

A continuación, añadiremos archivos del paquete. Puede añadir archivos individualmente o carpetas enteras si selecciona Añadir directorio (1). Para añadir archivos que no sean .dyf, asegúrese de cambiar el tipo de archivo en la ventana del navegador a "Todos los archivos (.)". Observe que añadiremos sin distinción todos los archivos, los nodos personalizados (.dyf) o los archivos de ejemplo (.dyn). Dynamo organizarÔ estos elementos en categorías cuando publiquemos el paquete.

Una vez que haya seleccionado la carpeta MapToSurface, Package Manager le mostrarÔ su contenido. Si va a cargar su propio paquete con una estructura de carpetas compleja y no desea que Dynamo realice cambios en ella, puede activar el conmutador "Conservar estructura de carpetas". Esta opción es para usuarios avanzados y, si el paquete no se ha configurado deliberadamente de una manera específica, lo mejor es dejar este conmutador desactivado y permitir que Dynamo organice los archivos según sea necesario. Pulse Siguiente para continuar.

Aquí tiene la oportunidad de previsualizar cómo organizarÔ Dynamo los archivos del paquete antes de publicarlo. Haga clic en Finalizar para continuar.

Para la publicación, haga clic en "Publicar localmente" (1). Si sigue este proceso, asegúrese de hacer clic en "Publicar localmente" y no en "Publicar en línea". No deseamos un conjunto de paquetes duplicados en Package Manager.

Tras la publicación, los nodos personalizados deberían estar disponibles en el grupo "DynamoPrimer" o en la biblioteca de Dynamo.

Ahora veamos el directorio raíz para comprobar cómo Dynamo ha aplicado formato al paquete que acabamos de crear. Para ello, vaya a la ficha Paquetes instalados > junto a MapToSurface, haga clic en el menú de puntos verticales > seleccione Mostrar directorio raíz.

Observe que el directorio raíz se encuentra en la ubicación local del paquete (recuerde que hemos publicado el paquete "localmente"). Dynamo hace referencia a esta carpeta para leer nodos personalizados. Por lo tanto, es importante publicar localmente el directorio en una ubicación de carpeta permanente (es decir, no en el escritorio). A continuación, se desglosan las carpetas del paquete de Dynamo.

  1. La carpeta bin contiene archivos .dll creados con bibliotecas de C# o Zero-Touch. No hay ninguna para este paquete, por lo que esta carpeta aparece vacĆ­a en este ejemplo.

  2. La carpeta dyf contiene los nodos personalizados. Al abrir esta, se mostrarƔn todos los nodos personalizados (archivos .dyf) de este paquete.

  3. La carpeta "extra" contiene todos los archivos adicionales. Es probable que estos archivos sean archivos de Dynamo (.dyn) o archivos adicionales necesarios (.svg, .xls, .jpeg, .sat, etc.).

  4. El archivo pkg es un archivo de texto bÔsico que define los parÔmetros del paquete. Esta función estÔ automatizada en Dynamo, pero se puede modificar si desea acceder a los detalles.

Publicación de un paquete en línea

Nota: No siga este paso a menos que publique realmente un paquete suyo.

  1. Cuando desee publicarlo, en Paquetes > Package Manager > ventana Paquetes instalados, seleccione el botón situado a la derecha del paquete que desee publicar y elija Publicar.

  2. Si va a actualizar un paquete que ya se ha publicado, seleccione Publicar versión; Dynamo actualizarÔ el paquete en línea en función de los nuevos archivos del directorio raíz del paquete. Así de fÔcil.

Publicar versión

Al actualizar los archivos de la carpeta raíz del paquete publicado, puede publicar también una nueva versión del paquete. Para ello, seleccione "Publicar versión" en la ventana Mis paquetes. Esta es una forma perfecta de realizar las actualizaciones necesarias del contenido y compartirlas con la comunidad. Publicar versión solo funcionarÔ si es la persona encargada del mantenimiento del paquete.

Transferencia de la propiedad de un paquete

Actualmente, no es posible transferir la propiedad de los paquetes mediante Package Manager. Puede solicitar al equipo de Dynamo que aƱada un propietario adicional. Tenga en cuenta que no se pueden eliminar propietarios existentes, solo aƱadir mĆ”s responsables del paquete. Si desea aƱadir una cuenta como propietario al paquete existente, envĆ­e un mensaje de correo electrónico a [email protected]. AsegĆŗrese de proporcionar el nombre del paquete y el de la cuenta que desea aƱadir.

Administración de grupos de puntos

Trabajar con puntos COGO y grupos de puntos en Civil 3D es un elemento central de muchos procesos de campo al dibujo terminado. Dynamo destaca realmente cuando se trata de la gestión de datos y, en este ejemplo, le mostraremos un posible caso de uso.

Objetivo

šŸŽÆ Cree un grupo de puntos para cada descripción de punto COGO exclusiva.

Conceptos clave

  • Trabajo con listas

  • Agrupación de objetos similares con el nodo List.GroupByKey

  • Visualización de la salida personalizada en el Reproductor de Dynamo

Compatibilidad con versiones

Este grƔfico se ejecutarƔ en Civil 3D 2020 y versiones posteriores.

Conjunto de datos

Descargue primero los archivos de ejemplo que aparecen a continuación y abra el archivo DWG y el grÔfico de Dynamo.

33KB
Survey_CreatePointGroups.dyn
Open
1MB
Survey_CreatePointGroups.dwg
Open

Solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Obtener todos los puntos COGO del documento

  2. Agrupar puntos COGO por descripción

  3. Crear grupos de puntos

  4. Generar un resumen en el Reproductor de Dynamo

”Empecemos!

Obtener puntos COGO

El primer paso consiste en obtener todos los grupos de puntos del documento y, a continuación, todos los puntos COGO dentro de cada grupo. Esto nos proporcionarÔ una lista anidada o una "lista de listas", con las que serÔ mÔs fÔcil trabajar mÔs adelante si aplanamos todo hasta una sola lista con el nodo List.Flatten.

Si es la primera vez que trabaja con listas, consulte la sección Trabajo con listas.

Obtener todos los grupos de puntos y puntos COGO

Agrupar puntos por descripción

Ahora que tenemos todos los puntos COGO, debemos separarlos en grupos en función de sus descripciones. Esto es exactamente lo que hace el nodo List.GroupByKey. BÔsicamente, agrupa todos los elementos que comparten la misma clave.

Agrupación de puntos COGO por descripción

Crear grupos de puntos

Ya se ha completado la parte mÔs complicada. El último paso consiste en crear nuevos grupos de puntos de Civil 3D a partir de los puntos COGO agrupados.

Crear nuevo grupo de puntos

Resumen del resultado

Al ejecutar el grÔfico, no hay nada que ver en la vista preliminar en segundo plano de Dynamo porque no estamos trabajando con ninguna geometría. Por lo tanto, la única forma de ver si el grÔfico se ha ejecutado correctamente es comprobar el espacio de herramientas o echar un vistazo a las vistas preliminares de salida de los nodos. Sin embargo, si ejecutamos el grÔfico con el Reproductor de Dynamo, podemos proporcionar mÔs información sobre los resultados del grÔfico mediante un resumen de los grupos de puntos que se han creado. Solo hay que hacer clic con el botón derecho en un nodo y establecerlo en Se genera. En este caso, se utiliza un nodo Watch renombrado para ver los resultados.

Al establecer un nodo en Se genera, se mostrarĆ” su contenido en la salida del Reproductor de Dynamo.

Resultado

A continuación, se muestra un ejemplo de cómo ejecutar el grÔfico con el Reproductor de Dynamo.

Ejecución del grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en el espacio de herramientas

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección Reproductor de Dynamo.

šŸŽ‰ Ā”Misión cumplida!

Ideas

A continuación, se ofrecen algunas ideas sobre cómo podría ampliar las posibilidades de este grÔfico.

Modifique la agrupación de puntos para que se base en la descripción completa en lugar del código original.

Agrupe los puntos por otras categorƭas predefinidas que elija (por ejemplo, "instantƔneas del terreno", "monumentos", etc.)

Cree automƔticamente superficies TIN para puntos de determinados grupos.

Superficies: interpoladas, puntos de control, solevación y revolución

El componente anÔlogo bidimensional a una NurbsCurve es la NurbsSurface y, al igual que la NurbsCurve de forma libre, las NurbsSurfaces se pueden crear con dos métodos bÔsicos: la introducción de un conjunto de puntos base y la interpolación entre ellos por parte de Dynamo, y la especificación explícita de los puntos de control de la superficie. Al igual que las curvas de forma libre, las superficies interpoladas son útiles cuando un diseñador conoce con precisión la forma que debe adoptar una superficie o si un diseño requiere que la superficie pase por los puntos de restricción. Por otra parte, las superficies creadas mediante puntos de control pueden ser mÔs útiles para los diseños exploratorios a través de varios niveles de suavizado.

Superficie interpolada

Para crear una superficie interpolada, simplemente genere una colección bidimensional de puntos que se aproxime a la forma de una superficie. La colección debe ser rectangular, es decir, no irregular. El método NurbsSurface.ByPoints crea una superficie a partir de estos puntos.

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_1);

Superficie de puntos de control

También se pueden crear NurbsSurfaces de forma libre mediante la especificación de los puntos de control subyacentes de una superficie. Al igual que las NurbsCurves, se puede considerar que los puntos de control representan una malla cuadrilateral con segmentos rectos que, en función del grado de la superficie, se suaviza hasta alcanzar la forma de superficie final. Para crear una NurbsSurface mediante puntos de control, incluya dos parÔmetros adicionales en NurbsSurface.ByPoints, que indiquen los grados de las curvas subyacentes en ambas direcciones de la superficie.

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

// create a surface of degree 2 with smooth segments
surf = NurbsSurface.ByPoints(python_points_1, 2, 2);

Podemos aumentar el grado de la NurbsSurface para cambiar la geometrĆ­a de superficie resultante:

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

// create a surface of degree 6
surf = NurbsSurface.ByPoints(python_points_1, 6, 6);

Superficie de solevación

Del mismo modo que las superficies se pueden crear mediante la interpolación entre un conjunto de puntos de entrada, estas se pueden crear mediante la interpolación entre un conjunto de curvas base. Esta operación se denomina solevado. Las curvas solevadas se crean mediante el constructor Surface.ByLoft con una colección de curvas de entrada como único parÔmetro.

// python_points_2, 3, and 4 are generated with
// Python scripts found in Chapter 12, Section 10

c1 = NurbsCurve.ByPoints(python_points_2);
c2 = NurbsCurve.ByPoints(python_points_3);
c3 = NurbsCurve.ByPoints(python_points_4);

loft = Surface.ByLoft([c1, c2, c3]);

Superficie de revolución

Las superficies de revolución son un tipo adicional de superficie creada mediante el barrido de una curva base alrededor de un eje central. Si las superficies interpoladas son el elemento anÔlogo bidimensional a las curvas interpoladas, las superficies de revolución son el elemento anÔlogo bidimensional a los círculos y los arcos.

Las superficies de revolución se especifican mediante una curva base que representa la "arista" de la superficie; un origen de eje, el punto base de la superficie; una dirección de eje, la dirección central del "núcleo", y un Ôngulo inicial y final de barrido. Se utilizan como entrada en el constructor Surface.Revolve.

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);

crv = NurbsCurve.ByPoints(pts);

axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);

surf = Surface.ByRevolve(crv, axis_origin, axis, 0,
    360);

Conceptos bƔsicos de geometrƭa con DesignScript

Punto

El objeto geométrico mÔs sencillo de la biblioteca de geometría estÔndar de Dynamo es un punto. Toda la geometría se crea mediante funciones especiales denominadas constructores, que devuelven un nuevo ejemplar de ese tipo de geometría específico. En Dynamo, los constructores empiezan por el nombre del tipo de objeto, en este caso, "Point", seguido del método de construcción. Para crear un punto tridimensional especificado con las coordenadas cartesianas X, Y y Z, utilice el constructor ByCoordinates:

// create a point with the following x, y, and z
// coordinates:
x = 10;
y = 2.5;
z = -6;

p = Point.ByCoordinates(x, y, z);

Los constructores de Dynamo se designan normalmente con el prefijo By y, al invocar estas funciones, se devuelve un objeto reciƩn creado de ese tipo. Este objeto reciƩn creado se almacena en la variable designada a la izquierda del signo igual.

La mayoría de los objetos tienen muchos constructores distintos y se puede utilizar el constructor BySphericalCoordinates para crear un punto que resida en una esfera, especificado por el radio de la esfera, y un primer y un segundo Ôngulo de rotación (especificados en grados):

// create a point on a sphere with the following radius,
// theta, and phi rotation angles (specified in degrees)
radius = 5;
theta = 75.5;
phi = 120.3;
cs = CoordinateSystem.Identity();

p = Point.BySphericalCoordinates(cs, radius, theta,
    phi);

Del punto a la lĆ­nea

Los puntos se pueden utilizar para crear geometrĆ­a dimensional superior como, por ejemplo, lĆ­neas. Se puede utilizar el constructor ByStartPointEndPoint para crear un objeto de lĆ­nea entre dos puntos:

// create two points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

// construct a line between p1 and p2
l = Line.ByStartPointEndPoint(p1, p2);

De la lĆ­nea a la superficie

De forma similar, las lĆ­neas se pueden utilizar para crear geometrĆ­a de superficie dimensional superior, por ejemplo, mediante el constructor Loft, que utiliza una serie de lĆ­neas o curvas e interpola una superficie entre ellas.

// create points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

p5 = Point.ByCoordinates(9, -10, -2);
p6 = Point.ByCoordinates(-11, -12, -4);

// create lines:
l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);
l3 = Line.ByStartPointEndPoint(p5, p6);

// loft between cross section lines:
surf = Surface.ByLoft([l1, l2, l3]);

De la superficie al sólido

Las superficies también se pueden utilizar para crear geometría sólida dimensional superior, por ejemplo, mediante el engrosado de la superficie a una distancia especificada. Muchos objetos tienen funciones enlazadas a ellos denominadas métodos, que permiten al programador ejecutar comandos en ese objeto específico. Entre los métodos comunes a todas las partes de geometría, se incluyen Translate y Rotate, que trasladan (desplazan) y rotan la geometría una cantidad especificada. Las superficies presentan el método Thicken, que utiliza una única entrada, un número que especifica el nuevo grosor de la superficie.

p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);

surf = Surface.ByLoft([l1, l2]);

// true indicates to thicken both sides of the Surface:
solid = surf.Thicken(4.75, true);

Intersecar

Los comandos de intersección pueden extraer geometría dimensional inferior de objetos dimensionales superiores. Esta geometría dimensional inferior extraída puede formar la base para una geometría dimensional superior en un proceso cíclico de creación, extracción y recreación. En este ejemplo, se utiliza el sólido generado para crear una superficie y se utiliza la superficie para crear una curva.

p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);

surf = Surface.ByLoft([l1, l2]);

solid = surf.Thicken(4.75, true);

p = Plane.ByOriginNormal(Point.ByCoordinates(2, 0, 0),
    Vector.ByCoordinates(1, 1, 1));

int_surf = solid.Intersect(p);

int_line = int_surf.Intersect(Plane.ByOriginNormal(
    Point.ByCoordinates(0, 0, 0),
    Vector.ByCoordinates(1, 0, 0)));

Parametrización geométrica

En los diseños computacionales, las curvas y las superficies se utilizan con frecuencia como el andamiaje subyacente para crear la geometría posterior. Para que esta geometría inicial se pueda utilizar como base para la geometría posterior, la secuencia de comandos debe poder extraer cualidades como, por ejemplo, la posición y la orientación en toda el Ôrea del objeto. Tanto las curvas como las superficies admiten esta extracción y este proceso se denomina parametrización.

Todos los puntos de una curva se pueden considerar como si tuvieran un parÔmetro único que oscila entre 0 y 1. Si creÔramos una NurbsCurve a partir de varios puntos de control o interpolación, el primer punto tendría el parÔmetro 0 y el último, el parÔmetro 1. Es imposible saber por adelantado cuÔl es el parÔmetro exacto para cualquier punto intermedio, lo que puede parecer una limitación grave, aunque se mitiga mediante una serie de funciones de utilidad. Las superficies tienen una parametrización similar a la de las curvas, aunque con dos parÔmetros en lugar de uno, denominados u y v. Si creÔramos una superficie con los siguientes puntos:

pts = [ [p1, p2, p3],
        [p4, p5, p6],
        [p7, p8, p9] ];

p1 tendrƭa el parƔmetro u = 0 v = 0, mientras que p9 tendrƭa los parƔmetros u = 1 v = 1.

La parametrización no resulta especialmente útil a la hora de determinar los puntos utilizados para generar curvas. Su principal finalidad es determinar las ubicaciones si se utilizan los puntos intermedios generados por los constructores NurbsCurve y NurbsSurface.

Las curvas presentan el método PointAtParameter, que utiliza un único argumento doble entre 0 y 1, y devuelve el objeto de punto en ese parÔmetro. Por ejemplo, esta secuencia de comandos busca los puntos en los parÔmetros 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 y 1:

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(6, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(3, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);

crv = NurbsCurve.ByPoints(pts);

pts_at_param = crv.PointAtParameter(0..1..#11);

// draw Lines to help visualize the points
lines = Line.ByStartPointEndPoint(pts_at_param,
    Point.ByCoordinates(4, 6, 0));

De forma similar, las superficies presentan el mƩtodo PointAtParameter, que utiliza dos argumentos, el parƔmetro u y v del punto generado.

Aunque la extracción de puntos individuales en una curva y una superficie puede ser útil, a menudo, es necesario que las secuencias de comandos conozcan las características geométricas específicas de un parÔmetro, como la dirección hacia la que estÔ orientada la curva o la superficie. El método CoordinateSystemAtParameter no solo busca la posición, sino un CoordinateSystem orientado en el parÔmetro de una curva o una superficie. Por ejemplo, el siguiente archivo de comandos extrae objetos CoordinateSystem orientados a lo largo de una superficie de revolución y utiliza la orientación de los objetos CoordinateSystem para generar líneas que permanecen en la dirección normal a la superficie:

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);

crv = NurbsCurve.ByPoints(pts);

axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);

surf = Surface.ByRevolve(crv, axis_origin, axis, 90,
    140);

cs_array = surf.CoordinateSystemAtParameter(
    (0..1..#7)<1>, (0..1..#7)<2>);

def make_line(cs : CoordinateSystem) {
	lines_start = cs.Origin;
    lines_end = cs.Origin.Translate(cs.ZAxis, -0.75);

    return = Line.ByStartPointEndPoint(lines_start,
        lines_end);
}

lines = make_line(Flatten(cs_array));

Como se ha mencionado anteriormente, la parametrización no siempre es uniforme a lo largo de una curva o una superficie, lo que significa que el parÔmetro 0.5 no siempre se corresponde con el punto medio y 0.25 no siempre se corresponde con el punto un cuarto a lo largo de una curva o una superficie. Para evitar esta limitación, las curvas presentan un conjunto adicional de comandos de parametrización que permiten buscar un punto en longitudes específicas a lo largo de una curva.

Curvas: puntos interpolados y de control

Existen dos formas fundamentales de crear curvas de forma libre en Dynamo: especificar una colección de puntos y conseguir que Dynamo interpole una curva suavizada entre ellos, o un método de nivel mÔs bajo mediante la especificación de los puntos de control subyacentes de una curva de un determinado grado. Las curvas interpoladas son útiles cuando un diseñador conoce exactamente la forma que debe adoptar una línea o si el diseño tiene restricciones específicas en cuanto a la ubicación que la curva puede o no atravesar. Las curvas especificadas mediante puntos de control son, en esencia, una serie de segmentos de línea recta que un algoritmo suaviza para formar una curva final. La especificación de una curva mediante puntos de control puede resultar útil para explorar formas de curva con diferentes grados de suavizado o cuando se requiere una continuidad suave entre segmentos de curva.

Curva interpolada

Para crear una curva interpolada, simplemente transfiera un conjunto de puntos al mƩtodo NurbsCurve.ByPoints.

num_pts = 6;

s = Math.Sin(0..360..#num_pts) * 4;

pts = Point.ByCoordinates(1..30..#num_pts, s, 0);

int_curve = NurbsCurve.ByPoints(pts);

La curva generada interseca cada uno de los puntos de entrada, comenzando y terminando en el primer y el último punto del conjunto, respectivamente. Se puede utilizar un parÔmetro periódico opcional para crear una curva periódica cerrada. Dynamo rellenarÔ automÔticamente el segmento que falta, por lo que no es necesario un punto final duplicado (idéntico al punto inicial).

pts = Point.ByCoordinates(Math.Cos(0..350..#10),
    Math.Sin(0..350..#10), 0);

// create an closed curve
crv = NurbsCurve.ByPoints(pts, true);

// the same curve, if left open:
crv2 = NurbsCurve.ByPoints(pts.Translate(5, 0, 0),
    false);

Curva de puntos de control

Las NurbsCurves se generan de forma muy similar, con puntos de entrada que representan los puntos finales de un segmento de lƭnea recta y un segundo parƔmetro que especifica la cantidad y el tipo de suavizado de la curva, que se denomina grado. * Una curva con el grado 1 no presenta suavizado; es una polilƭnea.

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

// a B-Spline curve with degree 1 is a polyline
ctrl_curve = NurbsCurve.ByControlPoints(pts, 1);

Una curva con el grado 2 se suaviza de forma que esta se interseque con el punto medio de los segmentos de polilƭnea y sea tangente a Ʃl:

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

// a B-Spline curve with degree 2 is smooth
ctrl_curve = NurbsCurve.ByControlPoints(pts, 2);

Dynamo admite curvas NURBS (B-spline racional no uniforme) hasta un grado 20; la siguiente secuencia de comandos ilustra el efecto que tiene el aumento de niveles de suavizado en la forma de una curva:

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

def create_curve(pts : Point[], degree : int)
{
	return = NurbsCurve.ByControlPoints(pts,
        degree);
}

ctrl_crvs = create_curve(pts, 1..11);

Tenga en cuenta que debe tener al menos un punto de control mƔs que el grado de la curva.

Otra ventaja de crear curvas mediante vértices de control es la capacidad de mantener la tangencia entre segmentos de curva individuales. Para ello, se extrae la dirección entre los dos últimos puntos de control y se continúa esta dirección con los dos primeros puntos de control de la curva siguiente. En el siguiente ejemplo, se crean dos curvas NURBS independientes que son, no obstante, tan suaves como una curva:

pts_1 = {};

pts_1[0] = Point.ByCoordinates(0, 0, 0);
pts_1[1] = Point.ByCoordinates(1, 1, 0);
pts_1[2] = Point.ByCoordinates(5, 0.2, 0);
pts_1[3] = Point.ByCoordinates(9, -3, 0);
pts_1[4] = Point.ByCoordinates(11, 2, 0);

crv_1 = NurbsCurve.ByControlPoints(pts_1, 3);

pts_2 = {};

pts_2[0] = pts_1[4];
end_dir = pts_1[4].Subtract(pts_1[3].AsVector());

pts_2[1] = Point.ByCoordinates(pts_2[0].X + end_dir.X,
    pts_2[0].Y + end_dir.Y, pts_2[0].Z + end_dir.Z);

pts_2[2] = Point.ByCoordinates(15, 1, 0);
pts_2[3] = Point.ByCoordinates(18, -2, 0);
pts_2[4] = Point.ByCoordinates(21, 0.5, 0);

crv_2 = NurbsCurve.ByControlPoints(pts_2, 3);

\\* Esta es una descripción muy simplificada de la geometría de curva NURBS; para obtener una explicación mÔs precisa y detallada, consulte Pottmann, et al. 2007, en las referencias.

Configurar su propia plantilla de Python

Con Dynamo 2.0, podemos especificar una plantilla por defecto (.py extension) para utilizarla al abrir la ventana de Python por primera vez. Esta ha sido una petición deseada durante mucho tiempo, ya que agiliza el uso de Python en Dynamo. La capacidad de utilizar una plantilla nos permite disponer de importaciones por defecto listas para usar cuando deseamos desarrollar una secuencia de comandos de Python personalizada.

Esta plantilla se encuentra en la ubicación APPDATA de la instalación de Dynamo.

Por lo general, suele ser ( %appdata%\Dynamo\Dynamo Core\{version}\ ).

Configuración de la plantilla

Para utilizar esta función, debemos añadir la siguiente línea en el archivo DynamoSettings.xml. (Edítelo en el Bloc de notas).

Cuando aparece <PythonTemplateFilePath />, solo tenemos que sustituir esto por lo siguiente:

<PythonTemplateFilePath>
<string>C:\Users\CURRENTUSER\AppData\Roaming\Dynamo\Dynamo Core\2.0\PythonTemplate.py</string>
</PythonTemplateFilePath>

Nota: Sustituya CURRENTUSER por su nombre de usuario.

A continuación, debemos crear una plantilla con la funcionalidad integrada que deseamos utilizar. En este caso, insertaremos las importaciones relacionadas con Revit y algunos de los demÔs elementos habituales al trabajar con Revit.

Puede iniciar un documento del Bloc de notas en blanco y pegar el siguiente código:

import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

#Preparing input from dynamo to revit
element = UnwrapElement(IN[0])

#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)

TransactionManager.Instance.TransactionTaskDone()

OUT = element

Una vez hecho esto, guarde este archivo como PythonTemplate.py en la ubicación APPDATA.

Comportamiento posterior de la secuencia de comandos de Python

Una vez que se haya definido la plantilla de Python, Dynamo la buscarĆ” cada vez que se coloque un nodo de Python. Si no se encuentra, se mostrarĆ” la ventana de Python por defecto.

Si se encuentra la plantilla de Python (como, por ejemplo, nuestra plantilla de Revit), aparecerƔn todos los elementos por defecto integrados.

Aquí encontrarÔ información adicional (de Radu Gidei) sobre esta excelente incorporación. https://github.com/DynamoDS/Dynamo/pull/8122

Espacio de trabajo

Espacio de trabajo principal

El espacio de trabajo de Dynamo consta de cuatro elementos principales.

  1. Todas las fichas activas

  2. Modo de vista preliminar

  3. Controles de zoom/encuadre

  4. Nodo en el espacio de trabajo

Todas las fichas activas

Al abrir un nuevo archivo, se abrirĆ” por defecto un nuevo espacio de trabajo de inicio.

Puede crear un nodo personalizado y abrirlo en un espacio de trabajo de nodos personalizados.

En cada ventana de Dynamo, solo se permite un espacio de trabajo de inicio, pero puede tener abiertos varios espacios de trabajo de nodos personalizados en las fichas.

Modo de vista preliminar

Estos tres mƩtodos se pueden utilizar para alternar entre distintas vistas preliminares:

a. Usar los iconos ubicados en la parte superior derecha

  • Vista preliminar de grĆ”fico

  • Vista preliminar 3D

b. Hacer clic con el botón derecho

  • Cambiar de la vista preliminar 3D a la vista preliminar de grĆ”fico

  • Cambiar de la vista preliminar de grĆ”fico a la vista preliminar 3D

c. Usar los mƩtodos abreviados de teclado (Ctrl+B)

Controles de zoom/encuadre

Puede utilizar iconos o el ratón para desplazarse por cualquiera de los espacios de trabajo.

a. En el modo Vista preliminar de grƔfico

  • Mediante iconos:

    • Ajustar en ventana

    • Ampliar

    • Reducir

    • Encuadre

  • Mediante el ratón:

    • Hacer clic con el botón izquierdo: seleccionar

    • Hacer clic con el botón izquierdo y arrastrar: cuadro de selección para elegir varios nodos

    • Desplazamiento hacia arriba/abajo: ampliar/reducir

    • Pulsar con el botón central y arrastrar: encuadre

    • Hacer clic con el botón derecho en cualquier lugar del lienzo: abrir la bĆŗsqueda en el lienzo

b. En el modo Vista preliminar 3D

  • Mediante iconos:

    • Ajustar en ventana

    • Ampliar

    • Reducir

    • Encuadre

    • Ɠrbita

  • Mediante el ratón:

    • Desplazamiento hacia arriba/abajo: ampliar/reducir

    • Pulsar con el botón central y arrastrar: encuadre

    • Hacer clic con el botón derecho y arrastrar: órbita

Nodo en el espacio de trabajo

Haga clic con el botón izquierdo para seleccionar cualquier nodo.

Para seleccionar varios nodos, haga clic y arrastre para crear un cuadro de selección.

Vector, plano y sistema de coordenadas

Vector, plano y sistema de coordenadas en Dynamo

Vector

El es una representación de magnitud y dirección, que se puede mostrar como una flecha que se acelera hacia una dirección concreta a una velocidad determinada. Este es un componente clave de los modelos de Dynamo. Tenga en cuenta que, como se encuentran en la categoría abstracta de "ayudas", cuando creamos un vector, no aparecerÔ nada en la vista preliminar en segundo plano.

  1. Podemos utilizar una lĆ­nea como sustituto de una vista preliminar del vector.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Plano

Un es una superficie bidimensional que puede tener el aspecto de una superficie plana que se extiende de forma indefinida. Cada plano tiene un origen y una dirección X, Y y Z (arriba).

  1. Aunque son abstractos, los planos tienen una posición de origen, por lo que podemos localizarlos en el espacio.

  2. En Dynamo, los planos se renderizan en la vista preliminar en segundo plano.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Sistema de coordenadas

Un permite determinar la ubicación de puntos u otros elementos geométricos. En la imagen siguiente, se explica el aspecto que tiene en Dynamo y lo que representa cada color.

  1. Aunque son abstractos, los sistemas de coordenadas también tienen una posición de origen para poder localizarlos en el espacio.

  2. En Dynamo, los sistemas de coordenadas se renderizan en la vista preliminar en segundo plano como un punto (origen) y líneas que definen los ejes (X es rojo, Y es verde y Z es azul según la convención).

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Información mÔs detallada sobre...

Los vectores, los planos y los sistemas de coordenadas constituyen el grupo principal de los tipos de geometría abstracta. Nos ayudan a definir la ubicación, la orientación y el contexto espacial de otra geometría que describe formas. Si, por ejemplo, digo que estoy en la ciudad de Nueva York en la calle 42 con Broadway (sistema de coordenadas), de pie en el nivel de la calle (plano), mirando al norte (vector), acabo de usar estas "ayudas" para definir dónde estoy. Lo mismo sucede con la carcasa de un teléfono o un rascacielos; necesitamos este contexto para desarrollar el modelo.

Vector

Un vector es una cantidad geométrica que describe la dirección y la magnitud. Los vectores son abstractos, es decir, representan una cantidad, no un elemento geométrico. Los vectores se pueden confundir fÔcilmente con los puntos porque ambos estÔn compuestos de una lista de valores. Aunque existe una diferencia clave: los puntos describen una posición en un sistema de coordenadas específico, mientras que los vectores describen una diferencia relativa en la posición, lo que equivale a la "dirección".

Si la idea de la diferencia relativa es confusa, piense en el Vector AB como "Estoy de pie en el punto A, mirando hacia el punto B". La dirección, de aquí (A) a allí (B), es el vector.

Este es un desglose de los vectores en sus diferentes partes mediante la misma notación AB:

  1. El punto inicial del vector se denomina base.

  2. El punto final del vector se denomina punta o sentido.

  3. El vector AB no es igual al vector BA, que señalaría la dirección opuesta.

Si desea ver un momento cómico en relación con los vectores (y su definición abstracta), eche un vistazo al clÔsico de la comedia "Aterriza como puedas" y escuche la siguiente línea de diÔlogo burlona bastante citada:

Bien, bien. ¿CuÔl es nuestro vector, Víctor?

Plano

Los planos son "ayudas" abstractas bidimensionales. En concreto, los planos son conceptualmente un "llano" que se extiende infinitamente en dos direcciones. Por lo general, se renderizan como un rectÔngulo mÔs pequeño próximo a su origen.

Es posible que piense: "”Un momento! ¿Origen? Eso suena a un sistema de coordenadas... como el que utilizo para modelar en el software de CAD".

Y tiene razón. La mayoría del software de modelado aprovecha los planos de construcción o "niveles" para definir un contexto local bidimensional en el que dibujar. Es posible que XY, XZ, YZ, o Norte, Sudeste o Nivel le resulten términos mÔs familiares. Todos son planos que definen un contexto "llano" infinito. Los planos no tienen profundidad, pero nos ayudan también a describir la dirección:

Sistema de coordenadas

Si estamos familiarizados con los planos, estamos a un paso de comprender los sistemas de coordenadas. Un plano tiene las mismas partes que un sistema de coordenadas, siempre que se trate de un sistema de coordenadas euclidiano o XYZ estƔndar.

Sin embargo, hay otros sistemas de coordenadas alternativos como, por ejemplo, cilíndricos o esféricos. Como veremos en las secciones posteriores, los sistemas de coordenadas también se pueden aplicar a otros tipos de geometría para definir una posición en esa geometría.

AƱadir sistemas de coordenadas alternativos: cilƭndricos y esfƩricos.

Introducción

Ahora que ya sabe un poco mƔs sobre el panorama general, vamos a empezar a crear el primer grƔfico de Dynamo en Civil 3D.

Este es un ejemplo sencillo que pretende demostrar la funcionalidad bƔsica de Dynamo. Es recomendable seguir los pasos descritos en un nuevo documento vacƭo de Civil 3D.

Abrir Dynamo

Lo primero que debe hacer es abrir un documento vacío en Civil 3D. Una vez allí, vaya a la ficha Administrar de la cinta de opciones de Civil 3D y busque el grupo Programación visual.

Haga clic en el botón Dynamo, que iniciarÔ Dynamo en una ventana independiente.

¿CuÔl es la diferencia entre Dynamo y el Reproductor de Dynamo?

Dynamo es la herramienta que se utiliza para crear y ejecutar grƔficos. El Reproductor de Dynamo permite ejecutar fƔcilmente grƔficos sin tener que abrirlos en Dynamo.

Vaya a la sección cuando desee probarlo.

Iniciar un nuevo grƔfico

Una vez que Dynamo estƩ abierto, aparecerƔ la pantalla de inicio. Haga clic en Nuevo para abrir un espacio de trabajo en blanco.

ĀæY los ejemplos?

Dynamo for Civil 3D incluye algunos grÔficos prediseñados que pueden servirle de inspiración para otras ideas sobre cómo usar Dynamo. Es recomendable que les eche un vistazo en algún momento, así como a los aquí en el manual de introducción.

AƱadir nodos

Ahora debería aparecer un espacio de trabajo vacío. Vamos a ver Dynamo en acción. Este es nuestro objetivo:

šŸŽÆ Cree un grĆ”fico de Dynamo que inserte texto en el espacio modelo.

Muy sencillo, Āæverdad? Sin embargo, antes de empezar, debemos abordar algunos aspectos fundamentales.

Los componentes bÔsicos de un grÔfico de Dynamo se denominan nodos. Un nodo es como una pequeña mÔquina; se le introducen datos, realiza algún trabajo con ellos y genera un resultado. Dynamo for Civil 3D cuenta con una biblioteca de nodos que se pueden conectar mediante cables para formar un grÔfico que realiza tareas mÔs eficaces y de mayor tamaño que las que puede realizar un nodo por sí solo.

Espere... ĀæY si nunca he utilizado Dynamo?

Puede que algunos de estos conceptos le resulten bastante nuevos, pero no se preocupe. Estas secciones le ayudarƔn a ponerse al dƭa.

Ahora, vamos a crear el grƔfico. Aquƭ hay una lista de todos los nodos que necesitaremos.

Para encontrar estos nodos, escriba sus nombres en la barra de búsqueda de la biblioteca o haga clic con el botón derecho en cualquier lugar del lienzo y realice allí la búsqueda.

¿Cómo puedo saber qué nodos utilizar y dónde encontrarlos?

Los nodos de la biblioteca se agrupan en categorías lógicas según su finalidad. Consulte la sección para realizar un recorrido mÔs detallado.

El grƔfico final deberƭa presentar el siguiente aspecto.

Resumamos todo lo que hemos hecho aquĆ­:

  1. Hemos elegido el documento en el que se va a trabajar. En este caso (y en la mayorĆ­a), deseamos trabajar en el documento activo de Civil 3D.

  2. Hemos definido el bloque de destino en el que se debe crear el objeto de texto (en este caso, el espacio modelo).

  3. Se ha utilizado un nodo String para especificar la capa en la que se debe colocar el texto.

  4. Se ha creado un punto mediante el nodo Point.ByCoordinates para definir la posición en la que se debe colocar el texto.

  5. Se han definido las coordenadas X e Y del punto de inserción de texto mediante dos nodos Number Slider.

  6. Se ha utilizado otro nodo String para definir el contenido del objeto de texto.

  7. Y, por Ćŗltimo, hemos creado el objeto de texto.

Veamos los resultados de nuestro nuevo y reluciente grƔfico.

Ver el resultado

De nuevo en Civil 3D, asegúrese de que la ficha Modelo esté seleccionada. Debería ver el nuevo objeto de texto que ha creado Dynamo.

Si no aparece el texto, es posible que deba ejecutar el comando ZOOM -> EXTENSIƓN para ampliar la vista del espacio correcto.

”FantÔstico! Ahora vamos a realizar algunas mejoras en el texto.

De vuelta en el grÔfico de Dynamo, cambie algunos de los valores de entrada, como la cadena de texto, las coordenadas del punto de inserción, etc. Debería observar cómo se actualiza automÔticamente el texto en Civil 3D. Observe también que si desconecta uno de los puertos de entrada, se elimina el texto. Si vuelve a conectar todo, el texto se crea de nuevo.

¿Por qué Dynamo no inserta un nuevo objeto de texto cada vez que se ejecuta el grÔfico?

Por defecto, Dynamo "recordarÔ" los objetos que crea. Si cambia los valores de entrada del nodo, los objetos de Civil 3D se actualizan en lugar de crear objetos nuevos. Obtenga mÔs información sobre este comportamiento en la sección .

šŸŽ‰ Ā”Misión cumplida!

Siguientes pasos

Este ejemplo es apenas una pequeña muestra de lo que puede hacer con Dynamo for Civil 3D. Siga leyendo para obtener mÔs información.

La conexión de Revit

Dynamo para Revit amplía el modelado de información de construcción mediante el entorno de datos y lógica de un editor grÔfico de algoritmos. Su flexibilidad, junto con una base de datos de Revit robusta, ofrece una nueva perspectiva para BIM.

Este capƭtulo se centra en los flujos de trabajo de Dynamo para BIM. Las secciones se basan principalmente en ejercicios, ya que la mejor forma de familiarizarse con un editor grƔfico de algoritmos para BIM es pasar directamente a un proyecto. No obstante, veamos primero los inicios del programa.

Compatibilidad con versiones de Revit

A medida que Revit y Dynamo continúan evolucionando, es posible que observe que la versión de Revit con la que estÔ trabajando no es compatible con la versión de Dynamo para Revit que ha instalado en su equipo. A continuación, se describen las versiones de Dynamo para Revit que son compatibles con Revit.

Versión de Revit
Primera versión de Dynamo estable
Última versión de Dynamo para Revit compatible

Historia de Dynamo

Con un equipo dedicado de desarrolladores y una ferviente comunidad, el proyecto ha avanzado mucho desde sus humildes inicios.

Dynamo se creó originalmente para agilizar los flujos de trabajo de AEC en Revit. Aunque Revit crea una robusta base de datos para cada proyecto, puede resultar difícil para un usuario medio acceder a esta información fuera de las restricciones de la interfaz. Revit incluye una API (interfaz de programación de aplicaciones) completa que permite a desarrolladores de terceros crear herramientas personalizadas. Y los programadores han estado utilizado esta API durante años, pero la creación de secuencias de comandos basadas en texto no estÔ accesible para todos. Dynamo busca democratizar los datos de Revit a través de un editor grÔfico de algoritmos de fÔcil manejo.

Mediante el uso de los nodos principales de Dynamo, junto con los nodos personalizados de Revit, un usuario puede ampliar sustancialmente los flujos de trabajo paramétricos en cuanto a interoperabilidad, documentación, anÔlisis y generación. Con Dynamo, los flujos de trabajo tediosos pueden automatizarse, mientras que pueden impulsarse las exploraciones de diseño.

Ejecución de Dynamo en Revit

En un editor de proyectos o familias de Revit, vaya a Complementos y haga clic en Dynamo.*

* Tenga en cuenta que Dynamo solo se ejecutarÔ en el archivo en el que se abrió.

Al abrir Dynamo en Revit, hay una nueva categoría denominada "Revit". Se trata de una adición completa a la interfaz de usuario que ofrece nodos que se adaptan específicamente a los flujos de trabajo de Revit.*

* El grƔfico de Dynamo solo funcionarƔ al abrirse en Dynamo para Revit mediante la familia de nodos especƭfica de Revit. Si se abre un grƔfico de Dynamo para Revit en Dynamo Sandbox, por ejemplo, no aparecerƔn los nodos de Revit.

Bloqueo de nodos

Como Revit es una plataforma que proporciona una sólida gestión de proyectos, las operaciones paramétricas de Dynamo pueden ser complejas y lentas de calcular. Si Dynamo tarda mucho tiempo en calcular los nodos, puede usar la función "Bloquear" para poner en pausa la ejecución de operaciones de Revit mientras desarrolla el grÔfico.

Puede obtener mÔs información sobre cómo bloquear nodos en la sección .

Comunidad y blog de Dynamo

Como Dynamo se creó originalmente para AEC, su comunidad grande y creciente es un recurso excelente para aprender del sector y ponerse en contacto con expertos de la industria. La comunidad de Dynamo la integran arquitectos, ingenieros, programadores y diseñadores a los que les apasiona compartir y crear.

Dynamo es un proyecto de código abierto que evoluciona constantemente y gran parte del desarrollo estÔ relacionado con Revit. Si es un nuevo usuario, diríjase al foro de debate y comience a . Si es un programador y desea participar en el desarrollo de Dynamo, consulte el . AdemÔs, un recurso excelente para las bibliotecas de terceros es . Muchos de estos paquetes se crean teniendo en mente AEC y echaremos un vistazo a los paquetes de terceros para la panelización en este capítulo.

Dynamo también mantiene un blog activo. Lea las últimas publicaciones para obtener información sobre los avances mÔs recientes.

Envolvente libre

El desarrollo de envolventes cinemÔticos para la validación de la separación es una parte importante del diseño de ferrocarriles. Dynamo se puede utilizar para generar sólidos para el envolvente en lugar de crear y administrar subensamblajes de obra lineal complejos para realizar el trabajo.

Objetivo

šŸŽÆ Utilice un bloque de perfil de vehĆ­culo para generar sólidos 3D de envolvente libre a lo largo de una obra lineal.

Conceptos clave

  • Trabajo con lĆ­neas caracterĆ­sticas de obra lineal

  • Transformación de la geometrĆ­a entre sistemas de coordenadas

  • Creación de sólidos mediante solevación

  • Control del comportamiento de los nodos con parĆ”metros de encaje

Compatibilidad con versiones

Este grƔfico se ejecutarƔ en Civil 3D 2020 y versiones posteriores.

Conjunto de datos

Descargue primero los archivos de ejemplo que aparecen a continuación y abra el archivo DWG y el grÔfico de Dynamo.

Solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Obtener lĆ­neas caracterĆ­sticas de la lĆ­nea base de obra lineal especificada

  2. Generar sistemas de coordenadas a lo largo de la línea característica de obra lineal con la separación deseada

  3. Transformar la geometrĆ­a de bloque de perfil en sistemas de coordenadas

  4. Solevar un sólido entre los perfiles

  5. Crear los sólidos en Civil 3D

”Empecemos!

Obtener datos de obra lineal

El primer paso es obtener datos de obra lineal. Seleccionaremos el modelo de obra lineal por su nombre, obtendremos una línea base específica dentro de la obra lineal y, a continuación, conseguiremos una línea característica dentro de la línea base por su código de punto.

Generar sistemas de coordenadas

Ahora vamos a generar sistemas de coordenadas a lo largo de las lƭneas caracterƭsticas de obra lineal entre un P.K. inicial y uno final especificados. Estos sistemas de coordenadas se utilizarƔn para alinear la geometrƭa de bloque del perfil del vehƭculo con la obra lineal.

Si es la primera vez que utiliza los sistemas de coordenadas, consulte la sección .

  1. Observe el pequeƱo XXX en la esquina inferior derecha del nodo. Esto significa que los parƔmetros de encaje del nodo se han definido como Producto vectorial, lo que es necesario para generar los sistemas de coordenadas con los mismos valores de P.K. para ambas lƭneas caracterƭsticas.

Si es la primera vez que utiliza el encaje de nodos, consulte la sección .

Transformar la geometrĆ­a de bloque

Ahora tenemos que crear de alguna manera una matriz de los perfiles de los vehículos a lo largo de las líneas características. Lo que vamos a hacer es transformar la geometría desde la definición de bloque del perfil del vehículo mediante el nodo Geometry.Transform. Se trata de un concepto difícil de visualizar, así que antes de ver los nodos, he aquí un grÔfico que muestra lo que va a ocurrir.

En definitiva, lo que hacemos es utilizar la geometría de Dynamo de una única definición de bloque y desplazarla o rotarla, a la vez que creamos una matriz a lo largo de la línea característica. ”Increíble! A continuación, se muestra el aspecto de la secuencia de nodos.

  1. De esta forma, se obtiene la definición de bloque del documento.

  2. Estos nodos obtienen la geometrĆ­a de Dynamo de los objetos del bloque.

  3. Estos nodos definen bƔsicamente el sistema de coordenadas desde el que se estƔ transformando la geometrƭa.

  4. Y, por Ćŗltimo, este nodo realiza el trabajo real de transformar la geometrĆ­a.

  5. Observe el encaje mƔs largo en este nodo.

Y esto es lo que obtenemos en Dynamo.

Generar sólidos

”Buenas noticias! Ya se ha completado la parte mÔs complicada. Ahora solo tenemos que generar sólidos entre los perfiles. Esto se consigue fÔcilmente con el nodo Solid.ByLoft.

Este es el resultado. Recuerde que estos son sólidos de Dynamo; aún debemos crearlos en Civil 3D.

Generar sólidos en Civil 3D

El último paso es generar los sólidos en el espacio modelo. También les asignaremos un color para que sean fÔciles de ver.

Resultado

A continuación, se muestra un ejemplo de cómo ejecutar el grÔfico con el Reproductor de Dynamo.

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección .

šŸŽ‰ Ā”Misión cumplida!

Ideas

A continuación, se ofrecen algunas ideas sobre cómo podría ampliar las posibilidades de este grÔfico.

AƱada la capacidad de utilizar diferentes intervalos de P.K. por separado para cada vƭa.

Divida los sólidos en segmentos mÔs pequeños que se puedan analizar individualmente para detectar conflictos.

Compruebe si los sólidos de envolvente se intersecan con elementos y coloree aquellos que entren en conflicto.

Traslación, rotación y otras transformaciones

Algunos objetos de geometría se pueden crear indicando de forma explícita las coordenadas X, Y y Z en un espacio tridimensional. Sin embargo, con mayor frecuencia, la geometría se desplaza a su posición final mediante transformaciones geométricas en el propio objeto o en su CoordinateSystem subyacente.

Traducción

La transformación geométrica mÔs sencilla es una traslación, que desplaza un objeto un número determinado de unidades en las direcciones X, Y y Z.

Rotación

Aunque todos los objetos de Dynamo se pueden trasladar mediante la adición del método .Translate al final del nombre del objeto, las transformaciones mÔs complejas requieren transformar el objeto de un CoordinateSystem subyacente a un nuevo CoordinateSystem. Por ejemplo, para girar un objeto 45 grados alrededor del eje X, debemos transformar el objeto de su CoordinateSystem existente sin rotación a un CoordinateSystem que se había girado 45 grados alrededor del eje X con el método .Transform:

Escala

AdemƔs de trasladarse y rotarse, los objetos CoordinateSystem tambiƩn se pueden crear cortados o con su escala ajustada. Se puede ajustar la escala de un CoordinateSystem con el mƩtodo .Scale:

Los objetos CoordinateSystem cortados se crean mediante la introducción de vectores no ortogonales en el constructor CoordinateSystem.

La escala y el corte son transformaciones geométricas mÔs complejas que la rotación y la traslación, por lo que no todos los objetos de Dynamo pueden someterse a ellas. En la siguiente tabla, se describen los objetos de Dynamo que pueden tener objetos CoordinateSystem con escala no uniforme y cortados.

Clase
CoordinateSystem con escala no uniforme
CoordinateSystem cortado
vector
6KB
Geometry for Computational Design - Vectors.dyn
Open
plano
7KB
Geometry for Computational Design - Plane.dyn
Open
sistema de coordenadas
3KB
Geometry for Computational Design - Coordinate System.dyn
Open
Vectores en Dynamo
Planos en Dynamo
Sistema de coordenadas en Dynamo
Vectores, planos y coordenadas
Detalles de los vectores
Vector
Plano
Sistema de coordenadas
Reproductor de Dynamo
Flujos de trabajo de ejemplo
Interfaz de usuario
Nodos y cables
Nodos y conceptos bƔsicos
Biblioteca de nodos
Enlace de objetos
Pantalla de inicio de Dynamo
Los nodos pueden colocarse desde la biblioteca o haciendo clic con el botón derecho en el lienzo.
El grƔfico final
El grÔfico final en acción

2013

0.6.1

0.6.3

2014

0.6.1

0.8.2

2015

0.7.1

1.2.1

2016

0.7.2

1.3.2

2017

0.9.0

1.3.4 / 2.0.3

2018

1.3.0

1.3.4 / 2.0.3

2019

1.3.3

1.3.4 / 2.0.4

2020

2.1.0: Revit 2020 o superior ahora incluye Dynamo y recibe actualizaciones al igual que Revit.

N/A

Nodos y cables
publicar preguntas
repositorio de GitHub
Dynamo Package Manager
Historia
Blog
185KB
Rail_ClearanceEnvelope (1).dyn
Open
22MB
Rail_ClearanceEnvelope.dwg
Open
Vector, plano y sistema de coordenadas
¿Qué es una lista?
Reproductor de Dynamo
Selección de la obra lineal, la línea base y la línea característica
Obtención de sistemas de coordenadas a lo largo de las líneas características de obra lineal
Visualización de la transformación de la geometría entre sistemas de coordenadas
La geometría del bloque del perfil del vehículo después de la transformación
Los sólidos de Dynamo después de la solevación
Generación de sólidos en Civil 3D
Ejecución del grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en Civil 3D
// create a point at x = 1, y = 2, z = 3
p = Point.ByCoordinates(1, 2, 3);

// translate the point 10 units in the x direction,
// -20 in y, and 50 in z
// p2’s new position is x = 11, y = -18, z = 53
p2 = p.Translate(10, -20, 50);
cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    10, 10, 10);

new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Rotate(Point.ByCoordinates(0, 0),
    Vector.ByCoordinates(1,0,0.5), 25);

// get the existing coordinate system of the cube
old_cs = CoordinateSystem.Identity();

cube2 = cube.Transform(old_cs, new_cs2);
cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    10, 10, 10);

new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Scale(20);

old_cs = CoordinateSystem.Identity();

cube2 = cube.Transform(old_cs, new_cs2);
new_cs = CoordinateSystem.ByOriginVectors(
    Point.ByCoordinates(0, 0, 0),
	Vector.ByCoordinates(-1, -1, 1),
	Vector.ByCoordinates(-0.4, 0, 0));

old_cs = CoordinateSystem.Identity();

cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    5, 5, 5);

new_curves = cube.Transform(old_cs, new_cs);

Arco

No

No

NurbsCurve

SĆ­

SĆ­

NurbsSurface

No

No

CĆ­rculo

No

No

LĆ­nea

SĆ­

SĆ­

Plano

No

No

Punto

SĆ­

SĆ­

PolĆ­gono

No

No

Sólido

No

No

Superficie

No

No

Texto

No

No

Operación booleana de sólido
Dynamo Hype Video

MatemƔticas

Si la forma mÔs sencilla de datos es el número, la forma mÔs sencilla de relacionarlos es mediante las matemÔticas. Desde operadores sencillos como la división a funciones trigonométricas y fórmulas mÔs complejas, las matemÔticas son un método excelente para empezar a explorar relaciones y patrones numéricos.

Operadores aritmƩticos

Los operadores son un conjunto de componentes que utilizan funciones algebraicas con dos valores numéricos de entrada que dan como resultado un valor de salida (suma, resta, multiplicación, división, etc.). Estos se pueden encontrar en Operators > Actions.

Icono
Nombre (sintaxis)
Entradas
Salidas

Sumar (+)

var[]...[], var[]...[]

var[]...[]

Restar (-)

var[]...[], var[]...[]

var[]...[]

Multiplicar (*)

var[]...[], var[]...[]

var[]...[]

Dividir (/)

var[]...[], var[]...[]

var[]...[]

Ejercicio: la fórmula de la espiral dorada

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

17KB
Building Blocks of Programs - Math.dyn
Open

Parte I: fórmula paramétrica

Combine operadores y variables para formar una relación mÔs compleja mediante fórmulas. Utilice los controles deslizantes para crear una fórmula que se pueda manejar con parÔmetros de entrada.

  1. Cree la secuencia numérica que representa la "t" de la ecuación paramétrica, por lo que debemos utilizar una lista lo suficientemente grande como para definir una espiral.

Number Sequence: defina una secuencia de nĆŗmeros basada en tres entradas: start, amount y step.

2. En el paso anterior, hemos creado una lista de números para definir el dominio paramétrico. A continuación, cree un grupo de nodos que representen la ecuación de la espiral dorada.

La espiral dorada se define como la siguiente ecuación:

x=rcosĪø=acosĪøebĪøx = r cos Īø = a cos Īø e^{bĪø}x=rcosĪø=acosĪøebĪø
y=rsinĪø=asinĪøebĪøy = r sin Īø = a sin Īøe^{bĪø}y=rsinĪø=asinĪøebĪø

La imagen siguiente representa la espiral dorada en forma de programación visual. Al desplazarse por el grupo de nodos, intente prestar atención al paralelismo entre el programa visual y la ecuación por escrito.

a. Number Slider: añada dos controles deslizantes de número al lienzo. Estos controles deslizantes representarÔn las variables a y b de la ecuación paramétrica. Estas representan una constante que es flexible o parÔmetros que podemos ajustar hacia el resultado deseado.

b. Multiplication (*): el nodo de multiplicación se representa mediante un asterisco. Lo usaremos con frecuencia para conectar variables de multiplicación.

c. Math.RadiansToDegrees: los valores de "t" se deben convertir a grados para que se evalúen en las funciones trigonométricas. Recuerde que Dynamo utiliza por defecto los grados para evaluar estas funciones.

d. Math.Pow: como función de "t" y del número "e", crea la secuencia Fibonacci.

e. Math.Cos y Math.Sin: estas dos funciones trigonomƩtricas distinguirƔn la coordenada X y la coordenada Y, respectivamente, de cada punto paramƩtrico.

f. Watch: ahora vemos que las salidas son dos listas, que serƔn las coordenadas x e y de los puntos utilizados para generar la espiral.

Parte II: de la fórmula a la geometría

El cúmulo de nodos del paso anterior funcionarÔ correctamente, pero conlleva mucho trabajo. Para crear un flujo de trabajo mÔs eficiente, consulte DesignScript a fin de definir una cadena de expresiones de Dynamo en un nodo. En la siguiente serie de pasos, veremos cómo utilizar la ecuación paramétrica para dibujar la espiral Fibonacci.

Point.ByCoordinates: conecte el nodo de multiplicación superior a la entrada "x" y el inferior a la entrada "y". Ahora se muestra una espiral paramétrica de puntos en la pantalla.

Polycurve.ByPoints: conecte Point.ByCoordinates del paso anterior a points. Podemos dejar connectLastToFirst sin entrada porque no estamos creando una curva cerrada. Se crea una espiral que pasa a travƩs de cada punto definido en el paso anterior.

Ya hemos completado la espiral Fibonacci. Vamos a profundizar en estos conceptos con dos ejercicios separados a partir de aquƭ; a uno lo llamaremos caracol y al otro girasol. Se trata de abstracciones de sistemas naturales, pero las dos aplicaciones diferentes de la espiral Fibonacci estarƔn bien representadas.

Parte III: de la espiral al caracol

Circle.ByCenterPointRadius: utilizaremos aquí un nodo de círculo con las mismas entradas que en el paso anterior. El valor por defecto del radio es 1,0, por lo que vemos una salida de círculos inmediata. Se hace inmediatamente evidente cómo los puntos divergen mÔs respecto al origen.

Number Sequence: es la matriz original de "t". Al conectarlo con el valor del radio de Circle.ByCenterPointRadius, los centros de cƭrculo siguen divergiendo mƔs respecto del origen, pero el radio de los cƭrculos aumenta, lo que crea un grƔfico de cƭrculos Fibonacci con mucho estilo.

Un premio para quiƩn consiga convertirlo a 3D.

Parte IV: del caracol al filotaxis

Ahora que hemos hecho una concha de caracol circular, vamos a pasar a las rejillas paramétricas. Vamos a usar una rotación bÔsica en la espiral Fibonacci para crear una rejilla Fibonacci y modelar el resultado según el crecimiento de las semillas de girasol.

Como punto de partida, vamos a realizar el mismo paso del ejercicio anterior: crear una matriz de puntos de espiral con el nodo Point.ByCoordinates.

A continuación, siga estos pequeños pasos para generar una serie de espirales en varias rotaciones.

a. Geometry.Rotate: existen varias opciones de Geometry.Rotate; asegúrese de que ha elegido el nodo que contiene las entradas geometry, basePlane y degrees. Conecte Point.ByCoordinates en la entrada geometry. Haga clic con el botón derecho en este nodo y asegúrese de que el encaje se haya establecido en "Producto vectorial".

b. Plano.XY: conéctelo a la entrada basePlane. Rotaremos alrededor del origen, que es la misma ubicación que la base de la espiral.

c. Number Range: para la entrada de grados, vamos a crear varias rotaciones. Esto se puede realizar rƔpidamente con un componente Number Range. ConƩctelo a la entrada degrees.

d. Number: para definir el rango de números, añada tres nodos numéricos al lienzo en orden vertical. De arriba a abajo, asigne valores de 0,0; 360,0 y 120,0 respectivamente. Estos valores controlan la rotación de la espiral. Observe los resultados de las salidas del nodo Number Range después de conectar los tres nodos numéricos al mismo.

Nuestro resultado empieza a parecerse a un remolino. Ajustemos algunos de los parÔmetros de Number Range y veamos cómo cambian los resultados.

Cambie el tamaƱo de paso del nodo Number Range de 120,0 a 36,0. Observe que esto crea mƔs rotaciones y que, por tanto, nos proporciona una rejilla mƔs densa.

Cambie el tamaño de paso del nodo Number Range de 36,0 a 3,6. Esto nos da una rejilla mucho mÔs densa y la dirección de la espiral no estÔ clara. Damas y caballeros, hemos creado un girasol.

Cadenas

¿Qué es una cadena?

Formalmente, una cadena es una secuencia de caracteres que representa una constante literal o algún tipo de variable. Informalmente, una cadena es texto en la jerga de la programación. Hemos trabajado con números, enteros y decimales, para controlar los parÔmetros y podemos hacer lo mismo con el texto.

Creación de cadenas

Las cadenas se pueden utilizar para una amplia gama de aplicaciones, como la definición de parÔmetros personalizados, la anotación de conjuntos de documentación y el anÔlisis mediante conjuntos de datos basados en texto. El nodo string se encuentra en la categoría Core > Input.

Los nodos de ejemplo anteriores son cadenas. Un nĆŗmero puede representarse como una cadena, al igual que una letra o una matriz completa de texto.

Ejercicio

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

9KB
Building Blocks of Programs - Strings.dyn
Open

Consulta de cadenas

Puede analizar rƔpidamente grandes cantidades de datos consultando cadenas. Hablaremos de algunas operaciones bƔsicas que pueden acelerar un flujo de trabajo y ayudar a mejorar la interoperabilidad de software.

La imagen siguiente se basa en una cadena de datos procedentes de una hoja de cÔlculo externa. La cadena representa los vértices de un rectÔngulo en el plano XY. Vamos a desglosar algunas operaciones de división de cadenas en un ejercicio de miniaturas:

  1. El separador ";" divide cada vƩrtice del rectƔngulo. De este modo, se crea una lista con tres elementos para cada vƩrtice.

  1. Al pulsar "+" en el centro del nodo, se crea un nuevo separador.

  2. AƱada una cadena "," al lienzo y conƩctela a la nueva entrada de separador.

  3. Nuestro resultado es ahora una lista de diez artículos. El nodo realiza la división primero en función de separator0 y, a continuación, en función de separator1.

Aunque los elementos de la lista anterior pueden tener el aspecto de nĆŗmeros, se siguen considerando cadenas individuales en Dynamo. Para crear puntos, su tipo de datos debe convertirse de una cadena a un nĆŗmero. Esto se realiza con el nodo String.ToNumber.

  1. Este nodo es sencillo. Conecte los resultados de String.Split a la entrada. La salida no tiene un aspecto diferente, pero el tipo de datos es ahora un nĆŗmero en lugar de una cadena.

Con algunas operaciones bÔsicas adicionales, ahora se ha dibujado un triÔngulo en el origen en función de la entrada de cadena original.

Manipulación de cadenas

Dado que una cadena es un objeto de texto genƩrico, alberga una amplia gama de aplicaciones. Echemos un vistazo a algunas de las acciones principales de la categorƭa Core > String de Dynamo:

Este es un mƩtodo para fusionar dos cadenas en orden. Toma cada cadena literal de una lista y crea una cadena combinada.

A continuación, se representa la concatenación de tres cadenas:

Concatenar
  1. Añada o sustraiga cadenas a la concatenación haciendo clic en los botones +/- del centro del nodo.

  2. La salida es una cadena concatenada, incluidos espacios y signos de puntuación.

El método de unión es muy similar a la concatenación, excepto que tiene una capa añadida de signos de puntuación.

Si ha trabajado en Excel, es posible que haya encontrado un archivo CSV. Se trata de un archivo de valores separados por comas. Se puede utilizar una coma (o, en este caso, dos guiones) como separador con el nodo String.Join para crear una estructura de datos similar.

La imagen anterior representa la unión de dos cadenas:

  1. La entrada "separator" permite crear una cadena que divide las cadenas unidas.

Trabajo con cadenas

En este ejercicio, vamos a usar métodos de consulta y manipulación de cadenas para deconstruir la última estrofa del poema Alto en el bosque en una noche de invierno de Robert Frost. No es la aplicación mÔs prÔctica, pero nos ayudarÔ a comprender las acciones de cadenas conceptuales a medida que las aplicamos a líneas legibles de ritmo y rima.

Comencemos con una división de cadenas bÔsica de la estrofa. Primero, observamos que el formato de la escritura se basa en comas. Utilizaremos este formato para separar cada línea en elementos individuales.

  1. La cadena base se pega en un nodo String.

  2. Se utiliza otro nodo String para indicar el separador. En este caso, usamos una coma.

  3. Se aƱade un nodo String.Split al lienzo y se conecta a las dos cadenas.

  4. La salida muestra ahora que hemos separado las lĆ­neas en elementos individuales.

Ahora, vamos a la parte buena del poema: las dos últimas líneas. La estrofa original era un elemento de datos. En el primer paso, separamos estos datos en elementos individuales. Ahora debemos buscar el texto que deseamos encontrar. Y, aunque podemos hacerlo seleccionando los dos últimos elementos de la lista, si se tratara de un libro completo, no sería un método eficaz leerlo todo y aislar manualmente los elementos.

  1. En lugar de realizar una bĆŗsqueda manual, se utiliza un nodo String.Contains para realizar una bĆŗsqueda de un conjunto de caracteres. Esto es similar a utilizar el comando "Buscar" en un procesador de texto. En este caso, obtenemos un valor de "verdadero" o "falso" si se encuentra esa subcadena en el elemento.

  2. En la entrada searchFor, definimos la subcadena que buscamos dentro de la estrofa. Vamos a usar un nodo String con el texto "And miles".

  3. La salida nos proporciona una lista de resultados de verdadero y falso. Utilizaremos esta lógica booleana para filtrar los elementos en el siguiente paso.

División
  1. List.FilterByBoolMask es el nodo que debemos utilizar para seleccionar los resultados con valor "false" (falso) y "true" (verdadero). La salida "in" devuelve las instrucciones con una entrada "mask" de "verdadero", mientras que la salida "out" devuelve las que tienen un valor de "falso".

  2. Nuestra salida de "in" es como se esperaba, ya que devuelve las dos frases finales de la estrofa.

Ahora, vamos a dejar clara la repetición de la estrofa fusionando las dos líneas. Al visualizar el resultado del paso anterior, observamos que hay dos elementos en la lista:

  1. Mediante dos nodos List.GetItemAtIndex, se pueden aislar los elementos con los valores 0 y 1 como entrada del Ć­ndice.

  2. La salida de cada nodo nos proporciona, por orden, las dos lĆ­neas finales.

Para fusionar estos dos elementos en uno, se utiliza el nodo String.Join:

División de cadenas
  1. DespuƩs de aƱadir el nodo String.Join, observamos que necesitamos un separador.

  2. Para crear el separador, se aƱade un nodo String al lienzo y se escribe una coma.

  3. La Ćŗltima salida ha fusionado los dos Ćŗltimos elementos en uno.

Puede parecer muy laborioso aislar las dos últimas líneas y es cierto que, a menudo, las operaciones de cadena requieren trabajo inicial. Pero son escalables y se pueden aplicar a grandes conjuntos de datos con relativa facilidad. Si trabaja paramétricamente con hojas de cÔlculo e interoperabilidad, asegúrese de mantener en mente las operaciones de cadena.

¿Qué es una lista?

¿Qué es una lista?

Una lista es un conjunto de elementos o ítems. Pensemos en un racimo de plÔtanos, por ejemplo. Cada plÔtano es un elemento de la lista (o racimo). Es mÔs fÔcil coger un racimo de plÔtanos que cada plÔtano individualmente y lo mismo se aplica a la agrupación de elementos por relaciones paramétricas en una estructura de datos.

PlƔtanos

FotografĆ­a de Augustus Binu.

Cuando hacemos la compra, ponemos todos los artƭculos comprados en una bolsa. Esta bolsa tambiƩn es una lista. Si vamos a hacer pan de plƔtano, necesitamos tres racimos de plƔtanos (vamos a hacer mucho pan de plƔtano). La bolsa representa una lista de racimos de plƔtanos y cada racimo representa una lista de plƔtanos. La bolsa es una lista de listas (bidimensional) y el racimo de plƔtanos es una lista (unidimensional).

En Dynamo, los datos de las listas se ponen en orden y el primer elemento de cada lista tiene un índice "0". A continuación, vamos a ver cómo se definen las listas en Dynamo y cómo se relacionan varias listas entre sí.

ƍndices basados en cero

Algo que podrƭa parecer extraƱo al principio es que el primer ƭndice de una lista es siempre 0 en lugar de 1. Por lo tanto, cuando hablamos del primer elemento de una lista, en realidad nos referimos al elemento que corresponde al ƭndice 0.

Por ejemplo, si tuviéramos que contar el número de dedos que tenemos en la mano derecha, es probable que contÔramos del 1 al 5. Sin embargo, si tuviéramos que poner los dedos en una lista, Dynamo les asignaría los índices del 0 al 4. Aunque esto puede parecer un poco extraño para programadores principiantes, el índice de base cero es una prÔctica estÔndar en la mayoría de los sistemas de cÔlculo.

Tenga en cuenta que sigue habiendo cinco elementos en la lista; solo que la lista utiliza un sistema de recuento basado en cero. Y los elementos que se almacenan en la lista no solo pueden ser nĆŗmeros. Pueden ser cualquier tipo de datos compatible con Dynamo, como puntos, curvas, superficies, familias, etc.

a. ƍndice

b. Punto

c. Elemento

A menudo, la forma mƔs sencilla de echar un vistazo al tipo de datos almacenados en una lista es conectar un nodo Watch con la salida de otro nodo. Por defecto, el nodo Watch muestra automƔticamente todos los ƭndices en el lado izquierdo de la lista y los elementos de datos en el lado derecho.

Estos Ć­ndices son elementos decisivos cuando se trabaja con listas.

Entradas y salidas

Las entradas y las salidas, que pertenecen a las listas, varían en función del nodo de Dynamo que se utilice. Como ejemplo, vamos a utilizar una lista de cinco puntos y a conectar esta salida a dos nodos de Dynamo diferentes: PolyCurve.ByPoints y Circle.ByCenterPointRadius:

Ejemplos de entrada
  1. La entrada points de PolyCurve.ByPoints busca "Point[]". Esto representa una lista de puntos.

  2. La salida de PolyCurve.ByPoints es una PolyCurve Ćŗnica creada a partir de una lista de cinco puntos.

  3. La entrada centerPoint de Circle.ByCenterPointRadius solicita "Point".

  4. La salida de Circle.ByCenterPointRadius es una lista de cinco cĆ­rculos cuyos centros corresponden a la lista original de puntos.

Los datos de entrada de PolyCurve.ByPoints y Circle.ByCenterPointRadius son los mismos. Sin embargo, el nodo Polycurve.ByPoints nos proporciona una PolyCurve, mientras que el nodo Circle.ByCenterPointRadius nos proporciona cinco círculos con centros en cada punto. Esto resulta intuitivo: la PolyCurve se dibuja como una curva que conecta los cinco puntos, mientras que los círculos crean un círculo distinto en cada punto. Entonces, ¿qué ocurre con los datos?

Al colocar el cursor sobre la entrada points de Polycurve.ByPoints, vemos que la entrada busca "Point[]". Observe los corchetes que aparecen al final. Este elemento representa una lista de puntos y, para crear una PolyCurve, la entrada debe ser una lista para cada PolyCurve. Por lo tanto, este nodo condensarĆ” cada lista en una PolyCurve.

Por otra parte, la entrada centerPoint de Circle.ByCenterPointRadius solicita "Point". Este nodo busca un punto, como elemento, para definir el centro del círculo. Por este motivo, se obtienen cinco círculos a partir de los datos de entrada. Reconocer esta diferencia en las entradas de Dynamo ayuda a comprender mejor cómo funcionan los nodos al administrar los datos.

Encaje

La correspondencia de datos es un problema sin una solución definitiva. Se produce cuando un nodo tiene acceso a entradas de distinto tamaño. El cambio del algoritmo de correspondencia de datos puede dar lugar a resultados muy diferentes.

Imagine un nodo que crea segmentos de lƭnea entre puntos (Line.ByStartPointEndPoint). TendrƔ dos parƔmetros de entrada y ambos proporcionarƔn coordenadas de punto:

Lista mƔs corta

La forma mƔs sencilla es conectar las entradas una a una hasta que uno de los flujos se acabe. Esto se denomina algoritmo "Lista mƔs corta". Este es el comportamiento por defecto de los nodos de Dynamo:

Lista mƔs larga

El algoritmo "Lista mƔs larga" sigue conectando entradas, reutilizando elementos, hasta que todos los flujos se acaben:

Producto vectorial

Por último, el método "Producto vectorial" hace todas las conexiones posibles:

Como puede ver, existen diferentes métodos para dibujar líneas entre estos conjuntos de puntos. Las opciones de encaje se encuentran haciendo clic con el botón derecho en el centro de un nodo y eligiendo el menú "Encaje".

¿Qué es la replicación?

Imagine que tiene un racimo de uvas. Si quisiera hacer zumo de uva, no las exprimiría una a una, sino que las pasaría todas por el exprimidor a la vez. La replicación en Dynamo funciona de forma similar; en lugar de aplicar una operación a un elemento cada vez, Dynamo puede aplicarla a toda una lista de una sola vez.

Los nodos de Dynamo reconocen automÔticamente cuÔndo estÔn trabajando con listas y aplican sus operaciones a varios elementos. Esto significa que no es necesario recorrer manualmente los elementos, simplemente ocurre. Pero, ¿cómo decide Dynamo cómo procesar las listas cuando hay mÔs de una?

De una de las siguientes formas:

Replicación cartesiana

Digamos que estÔ en la cocina haciendo zumos de frutas. Tiene una lista de frutas ({apple, orange, pear}) y una cantidad fija de agua para cada zumo (1 cup). Desea hacer zumo con cada fruta utilizando la misma cantidad de agua. En este caso, entra en juego la replicación cartesiana.

En Dynamo, esto significa que estÔ introduciendo la lista de frutas en la entrada de frutas del nodo Juice.Maker, mientras que la entrada de agua se mantiene constante en 1 taza. A continuación, el nodo procesa cada fruta individualmente, combinÔndola con la cantidad fija de agua. El resultado es el siguiente:

apple juice with 1 cup of water orange juice with 1 cup of water pear juice with 1 cup of water

Cada fruta se combina con la misma cantidad de agua.

Replicación Zip

La replicación Zip funciona de forma algo diferente. Si tuviera dos listas, una para frutas ({apple, orange, pear}) y otra para cantidades de azúcar ({2 tbsp, 3 tbsp, 1 tbsp}), la replicación Zip combinaría los elementos correspondientes de cada lista. Por ejemplo:

apple juice with 2 tablespoons of sugar orange juice with 3 tablespoons of sugar pear juice with 1 tablespoon of sugar

Cada fruta se combina con su correspondiente cantidad de azĆŗcar.

Para obtener mÔs información sobre cómo funciona, consulte las guías de replicación y encaje.

Ejercicio

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

3KB
Lacing.dyn
Open

Para realizar una demostración de las operaciones de encaje desarrolladas a continuación, utilizaremos este archivo base para definir la lista mÔs corta, la mÔs larga y el producto vectorial.

Cambiaremos el encaje en Point.ByCoordinates, pero no cambiaremos nada mƔs en el grƔfico anterior.

Lista mƔs corta

Si se selecciona Lista mÔs corta como opción de encaje (también la opción por defecto), se obtiene una línea diagonal bÔsica compuesta por cinco puntos. Cinco puntos es la longitud de la lista menor, de modo que el encaje de la lista mÔs corta se detiene cuando alcanza el final de una lista.

Ejemplos de entrada

Lista mƔs larga

Al cambiar el encaje a la lista mÔs larga, obtenemos una línea diagonal que se extiende verticalmente. Con el mismo método que el diagrama conceptual, el último elemento de la lista de cinco elementos se repetirÔ para alcanzar la longitud de la lista mÔs larga.

Ejemplos de entrada

Producto vectorial

Al cambiar el encaje a Producto vectorial, obtenemos todas las combinaciones entre cada lista, lo que nos proporciona una rejilla de puntos de 5 x 10. Esta es una estructura de datos equivalente al producto vectorial que se muestra en el diagrama de conceptos anterior, excepto que nuestros datos son ahora una lista de listas. Al conectar una PolyCurve, podemos ver que cada lista se ha definido por su valor X, lo que nos da una fila de lĆ­neas verticales.

Ejemplos de entrada
GitHub - Autodesk/civilconnection: CivilConnection enables the exchange of information between Civil 3D, Dynamo and Revit.GitHub
Arkance Systems Node Library for Civil 3D DynamoHuizBlog

Introducción a los paquetes

Dynamo ofrece un gran número de funciones listas para usar y también mantiene una extensa biblioteca de paquetes que puede ampliar considerablemente la capacidad de Dynamo. Un paquete es una colección de nodos personalizados o funciones adicionales. Dynamo Package Manager es un portal para que la comunidad descargue cualquier paquete que se haya publicado en línea. Estos conjuntos de herramientas los desarrollan terceros para ampliar la funcionalidad principal de Dynamo. EstÔn disponibles para todos los usuarios y listos para descargar con solo hacer clic.

Un proyecto de código abierto como Dynamo crece con este tipo de participación de la comunidad. Con desarrolladores independientes dedicados, Dynamo puede ampliar su alcance a los flujos de trabajo de una amplia gama de sectores. Por este motivo, el equipo de Dynamo ha realizado esfuerzos coordinados para optimizar el desarrollo y la publicación de paquetes (lo cual se trata en mayor detalle en las siguientes secciones).

Instalación de un paquete

La forma mÔs sencilla de instalar un paquete es mediante la opción de menú Paquetes de la interfaz de Dynamo. PongÔmonos manos a la obra e instalemos ahora un paquete. En este ejemplo rÔpido, instalaremos un paquete popular para la creación de paneles de cuadrados en una rejilla.

En Dynamo, vaya a Paquetes > Package Manager.

En la barra de bĆŗsqueda, buscamos "Quads from Rectangular Grid". Tras unos segundos, deberĆ­an aparecer todos los paquetes que coincidan con esta consulta de bĆŗsqueda. Vamos a seleccionar el primer paquete cuyo nombre coincida.

Haga clic en Instalar para añadir este paquete a la biblioteca y acepte la confirmación. Listo.

Observe que ahora tenemos otro grupo en la biblioteca de Dynamo denominado "buildz". Este nombre hace referencia al desarrollador del paquete y el nodo personalizado se encuentra en este grupo. Podemos empezar a utilizarlo al instante.

Utilice Code Block para definir rƔpidamente una rejilla rectangular, generar el resultado en un nodo Polygon.ByPoints y, posteriormente, en un nodo Surface.ByPatch a fin de ver la lista de paneles rectangulares que acaba de crear.

Instalación de la carpeta de paquetes: DynamoUnfold

El ejemplo anterior se centra en un paquete con un nodo personalizado, pero se utiliza el mismo proceso para descargar paquetes con varios nodos personalizados y archivos de datos complementarios. Vamos a demostrar esto a continuación con un paquete mÔs completo: Dynamo Unfold.

Como en el ejemplo anterior, seleccione primero Paquetes > Package Manager.

Esta vez, buscaremos "DynamoUnfold", todo en una sola palabra. Cuando aparezcan los paquetes, descƔrguelos. Para ello, haga clic en Instalar a fin de aƱadir Dynamo Unfold a la biblioteca de Dynamo.

En la biblioteca de Dynamo, tenemos un grupo de DynamoUnfold con varias categorĆ­as y nodos personalizados.

Ahora, veamos la estructura de archivos del paquete.

  1. Vaya primero a Paquetes > Package Manager > Paquetes instalados.

  2. Junto a DynamoUnfold, seleccione el menĆŗ de opciones .

  3. A continuación, haga clic en Mostrar directorio raíz para abrir la carpeta raíz de este paquete.

Esto nos llevarĆ” al directorio raĆ­z del paquete. Observe que hay tres carpetas y un archivo.

  1. La carpeta bin contiene archivos .dll. Este paquete de Dynamo se desarrolló mediante el uso de Zero-Touch, por lo que los nodos personalizados se guardan en esta carpeta.

  2. La carpeta dyf contiene los nodos personalizados. Este paquete no se desarrolló mediante nodos personalizados de Dynamo, por lo que esta carpeta estÔ vacía para este paquete.

  3. La carpeta extra contiene todos los archivos adicionales, incluidos los archivos de ejemplo.

  4. El archivo pkg es un archivo de texto bƔsico que define los parƔmetros del paquete. Podemos pasarlo por alto por ahora.

Al abrir la carpeta "extra", vemos un conjunto de archivos de ejemplo que se han descargado con la instalación. No todos los paquetes tienen archivos de ejemplo, pero aquí es donde se pueden encontrar si forman parte de un paquete.

Abriremos "SphereUnfold".

Después de abrir el archivo y pulsar "Ejecutar" en el solucionador, tenemos una esfera desplegada. Estos archivos de ejemplo son útiles para aprender a trabajar con un nuevo paquete de Dynamo.

Examinar y ver información de paquetes

En Package Manager, puede buscar paquetes mediante las opciones de orden y filtrado de la ficha Buscar paquetes. Hay varios filtros disponibles para el programa anfitrión, el estado (nuevo, obsoleto o no obsoleto) y si el paquete tiene o no dependencias.

Al ordenar los paquetes, puede identificar los mƔs valorados o los mƔs descargados, o aquellos con actualizaciones recientes.

También puede acceder a mÔs información sobre cada paquete. Para ello, haga clic en Ver detalles. Se abrirÔ un panel lateral en Package Manager, donde podrÔ encontrar información como las versiones y las dependencias, la URL del sitio web o del repositorio, información sobre la licencia, etc.

Sitio web de Dynamo Package Manager

Otra forma de descubrir los paquetes de Dynamo es explorar el sitio web de . Aquí puede encontrar dependencias de paquetes e información sobre compatibilidad de anfitrión y versión proporcionada por los autores de los paquetes. También puede descargar los archivos de paquete desde Dynamo Package Manager, pero este proceso es mÔs directo si se realiza desde Dynamo.

¿Dónde se almacenan los archivos de paquetes localmente?

Si desea ver dónde se guardan los archivos de los paquetes, en el panel de navegación superior haga clic en Dynamo > Preferencias > Configuración de paquetes > Ubicaciones de archivo de nodos y paquetes, donde podrÔ encontrar el directorio de la carpeta raíz actual.

Por defecto, los paquetes se instalan en una ubicación similar a esta ruta de carpeta: C:/Usuarios/[nombre de usuario]/AppData/Roaming/Dynamo/[Versión de Dynamo].

Configuración de una ubicación compartida para paquetes en una oficina

Para los usuarios que preguntan si es posible implantar Dynamo (de cualquier forma) con paquetes enlazados previamente: el enfoque que resuelve este problema y permite llevar el control desde una ubicación central para todos los usuarios con instalaciones de Dynamo consiste en añadir una ruta de paquete personalizada a cada instalación.

AƱadir una carpeta de red para que el administrador de BIM u otros usuarios puedan supervisar el almacenamiento de la carpeta con paquetes aprobados por la oficina

En la interfaz de usuario de una aplicación individual, vaya a Dynamo -> Preferencias -> Configuración de paquetes -> Ubicaciones de archivo de nodos y paquetes. En el cuadro de diÔlogo, presione el botón "Añadir ruta" y busque la ubicación de red del recurso de paquete compartido.

Como proceso automatizado, implicaría añadir información al archivo de configuración que se instala con Dynamo: C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]\DynamoSettings.xml.

Por defecto, la configuración de Dynamo for Revit es:

<CustomPackageFolders>

<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>

</CustomPackageFolders>

La adición de una ubicación personalizada tendría el siguiente aspecto:

<CustomPackageFolders>

<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>

<string>N:\OfficeFiles\Dynamo\Packages_Limited</string>

</CustomPackageFolders>

La administración central de esta carpeta también se puede controlar simplemente haciendo que la carpeta sea de solo lectura.

Carga de paquetes con archivos binarios desde una ubicación de red

Escenario

Es posible que una organización desee estandarizar los paquetes instalados por diferentes estaciones de trabajo y usuarios. Una forma de hacerlo podría consistir en instalar estos paquetes desde Dynamo -> Preferencias -> Configuración de paquetes -> Ubicaciones de archivo de nodos y paquetes, seleccionar una carpeta de red como ubicación de instalación y hacer que las estaciones de trabajo añadan esa ruta a Manage Node and Package Paths.

Problema

Si bien el escenario planteado funciona correctamente para paquetes que contengan solo nodos personalizados, es posible que no funcione para los paquetes que contengan archivos binarios, como los nodos Zero Touch. Este problema se debe a las que .NET Framework aplica a la carga de ensamblajes cuando proceden de una ubicación de red. Desafortunadamente, el uso del elemento de configuración loadFromRemoteSources, como se sugiere en el hilo vinculado, no es una solución factible para Dynamo, ya que se distribuye como componente y no como aplicación.

Solución alternativa

Una posible solución alternativa es utilizar una unidad de red asignada que apunte a la ubicación de la red y hacer que las estaciones de trabajo hagan referencia a esa ruta. Los pasos para crear una unidad de red asignada se describen .

MƔs detalles sobre los paquetes

La comunidad de Dynamo estÔ en constante crecimiento y evolución. Si explora el administrador de paquetes de Dynamo de vez en cuando, descubrirÔ algunos avances excelentes. En las secciones siguientes, analizaremos en profundidad los paquetes, desde la perspectiva del usuario final hasta la autoría de un paquete de Dynamo propio.

Colocación de servicios

El diseño de ingeniería de una construcción de viviendas típica implica trabajar con varios servicios subterrÔneos, como el alcantarillado sanitario, el desagüe pluvial, el agua potable u otros. En este ejemplo se mostrarÔ cómo puede utilizarse Dynamo para trazar las conexiones de servicios desde una red de distribución hasta una parcela (es decir, un terreno) especificada. Es habitual que cada parcela requiera una conexión de servicios, lo que supone un trabajo considerablemente tedioso para colocar todos ellos. Dynamo puede agilizar el proceso al dibujar automÔticamente la geometría necesaria con precisión, ademÔs de proporcionar entradas flexibles que pueden ajustarse para adaptarse a las normas de los organismos locales.

Objetivo

šŸŽÆ Coloque las referencias a bloque de contadores de servicios de agua a una distancia determinada de la lĆ­nea de parcela y trace una lĆ­nea para cada conexión de servicios perpendicular a la red de distribución.

Conceptos clave

  • Uso del nodo Select Object para la entrada de usuario

  • Trabajo con sistemas de coordenadas

  • Uso de operaciones geomĆ©tricas como Geometry.DistanceTo y Geometry.ClosestPointTo

  • Creación de referencias a bloque

  • Control de la configuración de enlace de objetos

Compatibilidad con versiones

Este grƔfico se ejecutarƔ en Civil 3D 2020 y versiones posteriores.

Conjunto de datos

Descargue primero los archivos de ejemplo que aparecen a continuación y abra el archivo DWG y el grÔfico de Dynamo.

Solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Obtener la geometría de curva para la red de distribución

  2. Obtener la geometrƭa de curva para una lƭnea de parcela seleccionada por el usuario, invirtiƩndola si es necesario

  3. Generar los puntos de inserción para los contadores de servicio

  4. Obtener los puntos de la red de distribución mÔs cercanos a las ubicaciones de los contadores de servicio

  5. Crear referencias a bloque y lĆ­neas en el espacio modelo

”Empecemos!

Obtener la geometría de la red de distribución

Nuestro primer paso es introducir en Dynamo la geometría de la red de distribución. En lugar de seleccionar líneas o polilíneas individuales, utilizaremos todos los objetos de una determinada capa y los uniremos como una PolyCurve de Dynamo.

Si es la primera vez que utiliza la geometría de curvas de Dynamo, consulte la sección .

Obtener la geometrĆ­a de lĆ­nea de parcela

A continuación, debemos obtener la geometría de una línea de parcela seleccionada en Dynamo para poder trabajar con ella. La herramienta adecuada para la tarea es el nodo Select Object, que permite al usuario del grÔfico seleccionar un objeto específico en Civil 3D.

También debemos ocuparnos de los posibles problemas que puedan surgir. La línea de parcela tiene un punto inicial y uno final, lo que significa que tiene una dirección. Para que el grÔfico genere resultados coherentes, necesitamos que todas las líneas de parcela tengan una dirección coherente. Podemos dar cuenta de esta condición directamente en la lógica del grÔfico, lo que hace que este sea mÔs flexible.

  1. Obtenga los puntos inicial y final de la lĆ­nea de parcela.

  2. Mida la distancia de cada punto a la red de distribución y, a continuación, calcule la distancia que sea mayor.

  3. El resultado deseado es que el punto inicial de la línea sea el mÔs cercano a la red de distribución. Si no es así, invertiremos la dirección de la línea de parcela. En caso contrario, simplemente restableceremos la línea de parcela original.

Generar puntos de inserción

Es hora de decidir dónde se van a colocar los contadores de servicio. Por lo general, la colocación viene determinada por los requisitos de los organismos locales, por lo que nos limitaremos a proporcionar valores de entrada que puedan modificarse para adaptarlos a las distintas situaciones. Vamos a utilizar un sistema de coordenadas a lo largo de la línea de parcela como referencia para crear los puntos. Esto facilita la definición de desfases en relación con la línea de parcela, independientemente de su orientación.

Si es la primera vez que utiliza los sistemas de coordenadas, consulte la sección .

Obtener los puntos de conexión

Ahora debemos obtener los puntos de la red de distribución mÔs cercanos a las ubicaciones de los contadores de servicio. Esto nos permitirÔ dibujar las conexiones de servicios en el espacio modelo de forma que sean siempre perpendiculares a la red de distribución. El nodo Geometry.ClosestPointTo es la solución perfecta.

  1. Esta es la PolyCurve de la red de distribución.

  2. Estos son los puntos de inserción del contador de servicio.

Crear objetos

El último paso consiste en crear objetos en el espacio modelo. Utilizaremos los puntos de inserción que hemos generado anteriormente para crear referencias a bloque y, a continuación, usaremos los puntos de la red de distribución para dibujar líneas en las conexiones de servicios.

Resultado

Al ejecutar el grÔfico, debe ver las nuevas referencias a bloque y las líneas de conexión de servicios en el espacio modelo. Pruebe a cambiar algunas de las entradas y observe cómo todo se actualiza automÔticamente.

Información adicional: habilitar la colocación secuencial

Tras colocar los objetos para una lĆ­nea de parcela, puede que observe que los objetos se "desplazan" al seleccionar una lĆ­nea diferente.

Este es el comportamiento por defecto de Dynamo y es muy útil en muchos casos. Sin embargo, puede que desee colocar varias conexiones de servicios de forma secuencial y que Dynamo cree nuevos objetos con cada ejecución en lugar de modificar los originales. Cambie la configuración de enlace de objetos para controlar este comportamiento.

Para obtener mÔs información, consulte la sección .

Al cambiar esta configuración, se obligarÔ a Dynamo a "olvidar" los objetos que crea con cada ejecución. A continuación, se muestra un ejemplo de ejecución del grÔfico con el enlace de objetos desactivado mediante el Reproductor de Dynamo.

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección .

šŸŽ‰ Ā”Misión cumplida!

Ideas

A continuación, se ofrecen algunas ideas sobre cómo podría ampliar las posibilidades de este grÔfico.

Coloque varias conexiones de servicios simultƔneamente en lugar de seleccionar cada lƭnea de parcela.

Ajuste las entradas para colocar bocas de alcantarilla en lugar de contadores de servicio de agua.

Añada un conmutador para permitir la colocación de una única conexión de servicio en un lado concreto de la línea de parcela en lugar de en ambos lados.

Intersección y recorte

Muchos de los ejemplos mostrados hasta ahora se han centrado en la creación de geometría dimensional superior a partir de objetos dimensionales inferiores. Los métodos de intersección permiten que esta geometría dimensional superior genere objetos dimensionales inferiores, mientras que los comandos de recorte y de selección de recorte permiten que el archivo de comandos modifique las formas geométricas una vez creadas.

El método Intersect se define en todas las partes de la geometría de Dynamo, lo que significa que, en teoría, cualquier elemento de geometría se puede intersecar con cualquier otro. Naturalmente, algunas intersecciones no tienen sentido, como las intersecciones que involucran puntos, ya que el objeto resultante siempre serÔ el propio punto de entrada. Las demÔs combinaciones posibles de intersecciones entre objetos se describen en el siguiente grÔfico. En la siguiente tabla, se muestra el resultado de varias operaciones de intersección:

Intersecar

En el siguiente ejemplo muy sencillo, se muestra la intersección de un plano con una NurbsSurface. La intersección genera una matriz de NurbsCurves, que se puede utilizar como cualquier otra NurbsCurve.

El mƩtodo Trim es muy similar al mƩtodo Intersect, ya que se define para casi cada elemento de geometrƭa. Sin embargo, existen muchas mƔs limitaciones en el mƩtodo Trim que en Intersect.

Recortar

Algo que se debe tener en cuenta en los métodos Trim es el requisito de un punto de "selección", un punto que determina la geometría que se descartarÔ y las partes que se deben conservar. Dynamo busca y descarta la geometría recortada mÔs cercana al punto de selección.

Lógica

La lógica o, mÔs específicamente, la lógica condicional nos permite especificar una acción o un conjunto de acciones basadas en una prueba. Tras evaluar la prueba, dispondremos de un valor booleano que representa True o False que podemos utilizar para controlar el flujo del programa.

Booleanos

Las variables numéricas pueden almacenar una gran variedad de números diferentes. Las variables booleanas solo pueden almacenar dos valores denominados Verdadero o Falso, Sí o No, 1 o 0. Rara vez utilizamos booleanos para realizar cÔlculos debido a su rango limitado.

Instrucciones condicionales

La instrucción "If" ("si") es un concepto clave en la programación: "Si esto es cierto, eso ocurre; de lo contrario, otra cosa ocurre. La acción resultante de la instrucción se rige por un valor booleano. Hay varias formas de definir una instrucción "If" en Dynamo:

Icono
Nombre (sintaxis)
Entradas
Salidas

Veamos un breve ejemplo de cada uno de estos tres nodos en acción mediante la instrucción condicional "If".

En esta imagen, el nodo Boolean se ha establecido en Verdadero (True), lo que significa que el resultado es una cadena que dice: "este es el resultado si es verdadero". Los tres nodos que crean la instrucción If funcionan de la misma forma aquí.

De nuevo, los nodos funcionan de la misma forma. Si el nodo Boolean se cambia a Falso (False), el resultado es el número Pi, tal y como se define en la instrucción If original.

Ejercicio: lógica y geometría

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Parte I: filtrado de una lista

  1. Usemos la lógica para separar una lista de números en una lista de números pares y una lista de números impares.

a. Number Range: añada un rango de números al lienzo.

b. Nodos Number: aƱada tres nodos numƩricos al lienzo. El valor de cada nodo numƩrico debe ser 0,0 para start, 10,0 para end y 1,0 para step.

c. Salida: nuestra salida es una lista de 11 nĆŗmeros que van del 0 al 10.

d. Módulo (%): Number Range se conecta a x y 2,0 a y. De este modo, se calcula el resto de cada número de la lista dividido por 2. La salida de esta lista nos proporciona una lista de valores alternantes entre 0 y 1.

e. Prueba de igualdad (==): añada una prueba de igualdad al lienzo. Conecte la salida de módulo a la entrada x y 0,0 en la entrada y.

f. Watch: la salida de la prueba de igualdad es una lista de valores que alterna entre verdadero y falso. Estos son los valores utilizados para separar los elementos de la lista. 0 (o true) representa nĆŗmeros pares y 1 (o false) representa nĆŗmeros impares.

g. List.FilterByBoolMask: este nodo filtrarÔ los valores en dos listas diferentes en función del valor booleano de entrada. Conecte el nodo Number Range original a la entrada list y la salida de la prueba de igualdad en la entrada mask. La salida in representa los valores verdaderos, mientras que la salida out representa los valores falsos.

h. Watch: como resultado, ahora tenemos una lista de números pares y una de impares. Hemos utilizado operadores lógicos para separar las listas en patrones.

Parte II: de la lógica a la geometría

BasÔndonos en la lógica establecida en el primer ejercicio, vamos a aplicar esta configuración en una operación de modelado.

2. Comenzaremos por donde dejamos el ejercicio anterior, con los mismos nodos. Las únicas excepciones (ademÔs de cambiar el formato) son las siguientes:

a. Utilice un nodo Sequence con estos valores de entrada.

b. Se ha desconectado la entrada list en List.FilterByBoolMask. Dejaremos estos nodos a un lado por ahora, pero en fases posteriores del ejercicio serÔn muy útiles.

3. Creemos primero un grupo independiente de grÔficos, como se muestra en la imagen anterior. Este grupo de nodos representa una ecuación paramétrica para definir una curva de línea. Información que debemos tener en cuenta:

a. El primer control deslizante de número representa la frecuencia de la onda; debe tener un mínimo de 1, un mÔximo de 4 y un paso de 0,01.

b. El segundo control deslizante de número representa la amplitud de la onda; debe tener un mínimo de 0, un mÔximo de 1 y un paso de 0,01.

c. PolyCurve.ByPoints: si se copia el diagrama de nodos anterior, el resultado es una curva de seno en la ventana de vista preliminar de Dynamo.

El método que se sigue para las entradas es utilizar nodos numéricos para las propiedades mÔs estÔticas y controles deslizantes de número para las mÔs flexibles. Vamos a mantener el rango de números original que definimos al principio de este paso. Sin embargo, la curva de seno que se crea aquí debe tener cierta flexibilidad. Se pueden mover estos controles deslizantes para ver cómo se actualiza la frecuencia y la amplitud de la curva.

4. Vamos a saltar un poco en la definición, así que veamos el resultado final para que podamos tener como referencia lo que vamos a conseguir. Los dos primeros pasos se realizan por separado; ahora queremos conectar los dos. Utilizaremos la curva de seno base para controlar la ubicación de los componentes de cremallera y utilizaremos la lógica de verdadero/falso para alternar entre cuadros pequeños y cuadros mÔs grandes.

a. Math.RemapRange: con la secuencia de nĆŗmeros creada en el paso 02, vamos a crear una nueva serie de nĆŗmeros reasignando el rango. Los nĆŗmeros originales del paso 01 van del 0 al 100. Estos nĆŗmeros oscilan entre 0 y 1 en las entradas newMin y newMax respectivamente.

5. Cree un nodo Curve.PointAtParameter y, a continuación, conecte la salida Math.RemapRange del paso 04 como su entrada param.

Este paso crea puntos a lo largo de la curva. Hemos reasignado los nĆŗmeros a entre 0 y 1 porque la entrada param busca valores en este rango. El valor 0 representa el punto inicial; el valor 1 representa los puntos finales. Todos los nĆŗmeros que se encuentran en medio se evalĆŗan dentro del rango de [0,1].

6. Conecte la salida de Curve.PointAtParameter a List.FilterByBoolMask para separar la lista de Ć­ndices pares e impares.

a. List.FilterByBoolMask: conecte el nodo Curve.PointAtParameter del paso anterior a la entrada list.

b. Watch: un nodo de visualización para in y otro para out indican que hay dos listas que representan índices pares e impares. Estos puntos se ordenan de la misma forma en la curva, que se muestra en el siguiente paso.

7. A continuación, vamos a utilizar el resultado de salida de List.FilterByBoolMask en el paso 05 para generar geometrías con tamaños según sus índices.

Cuboid.ByLengths: reproduzca las conexiones representadas en la imagen anterior para obtener una cremallera a lo largo de la curva de seno. Un cubo es solo un cuadro, y estamos definiendo su tamaño basÔndonos en el punto de curva del centro del cuadro. La lógica de la división par/impar debería ser clara ahora en el modelo.

a. Lista de ortoedros en Ć­ndices uniformes.

b. Lista de ortoedros en Ć­ndices impares.

Y eso es todo. Acaba de programar un proceso para definir las cotas de geometría de acuerdo con la operación lógica que se muestra en este ejercicio.

Optimize Road Design with Dynamo for Civil 3D and Generative Design | Autodesk Universitywww.autodesk.com
Civil 3DDynamo
Dynamo for Civil 3Dbooks.huiz.net
Dynamo in Civil 3D Introduction—Unlocking the Mystery of Scripting | Autodesk Universitywww.autodesk.com
Computational Design for Civil Engineers | Autodesk Universitywww.autodesk.com
Helphelp.autodesk.com
Generating, Transforming, and Analyzing Railway Design Data in Civil 3D and Dynamo | Autodesk Universitywww.autodesk.com
Mundane Civil 3D Tasks to Automate with Dynamo for Civil 3D | Autodesk Universitywww.autodesk.com
Underground Utility GIS Features to Civil 3D Pipe Networks with Dynamo | Autodesk Universitywww.autodesk.com
Dynamo for Civil 3D: Automated Checks of Open-Format Road Design Made Easy | Autodesk Universitywww.autodesk.com
108KB
Land_ServicePlacement.dyn
Open
842KB
Land_ServicePlacement.dwg
Open
Curvas
Vector, plano y sistema de coordenadas
Enlace de objetos
Reproductor de Dynamo
Obtener los objetos de Civil 3D y unir todo en una Ćŗnica PolyCurve
Seleccionar una línea de parcela y asegurarse de que presente la dirección correcta
Creación de los puntos de inserción para los contadores de servicio
Obtención de puntos perpendiculares en la red de distribución
Ajuste de los parÔmetros de entrada en Dynamo y visualización inmediata de los resultados en Civil 3D
Comportamiento que aparece cuando se activa el enlace de objetos
ParƔmetros de enlace de objetos de Dynamo
Ejecución del grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en Civil 3D

Con:

Superficie

Curva

Plano

Sólido

Superficie

Curva

Punto

Punto, curva

Superficie

Curva

Punto

Punto

Punto

Curva

Plano

Curva

Punto

Curva

Curva

Sólido

Superficie

Curva

Curva

Sólido

// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_5, 3, 3);

WCS = CoordinateSystem.Identity();

pl = Plane.ByOriginNormal(WCS.Origin.Translate(0, 0,
    0.5), WCS.ZAxis);

// intersect surface, generating three closed curves
crvs = surf.Intersect(pl);

crvs_moved = crvs.Translate(0, 0, 10);

Uso: Punto

Curva

Plano

Superficie

Sólido

En: Curva

SĆ­

No

No

No

No

PolĆ­gono

-

No

SĆ­

No

No

Superficie

-

SĆ­

SĆ­

SĆ­

SĆ­

Sólido

-

-

SĆ­

SĆ­

SĆ­

// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_5, 3, 3);

tool_pts = Point.ByCoordinates((-10..20..10)<1>,
    (-10..20..10)<2>, 1);

tool = NurbsSurface.ByPoints(tool_pts);

pick_point = Point.ByCoordinates(8, 1, 3);

result = surf.Trim(tool, pick_point);
Dynamo Package Manager
medidas de seguridad
aquĆ­
Sitio de Package Manager

If (If)

test, true, false

resultado

Code Block ((x?y:z);)

x? y, z

resultado

73KB
Building Blocks of Programs - Logic.dyn
Open

Nodos y cables

Nodos

En Dynamo, los nodos son los objetos que se conectan para formar un programa visual. Cada nodo realiza una operación: en ocasiones, es algo tan sencillo como almacenar un número, o puede ser una acción mÔs compleja, como crear o consultar geometría.

AnatomĆ­a de un nodo

La mayoría de los nodos de Dynamo estÔn compuestos por cinco partes. Aunque existen excepciones, como los nodos de entrada, la anatomía de cada nodo se puede describir como se indica a continuación:

  1. Nombre: nombre del nodo con la convención de nomenclatura Category.Name.

  2. Cuerpo principal: el cuerpo principal del nodo. Al hacer clic con el botón derecho, se presentan opciones en el nivel de todo el nodo.

  3. Puertos (entrada y salida): los receptores de los cables que proporcionan los datos de entrada al nodo, así como los resultados de la acción del nodo.

  4. Valor por defecto (haga clic con el botón derecho en un puerto de entrada): algunos nodos tienen valores por defecto que se pueden utilizar o no.

  5. Icono de encaje: indica la opción de encaje especificada para las entradas de lista coincidentes (se explicarÔ detalladamente mÔs adelante).

Puerto de entrada/salida de los nodos

Las entradas y las salidas de los nodos se denominan puertos y actúan como receptores de cables. Los datos entran por la izquierda en el nodo a través de los puertos y salen del nodo por la derecha después de que se haya ejecutado su operación.

Los puertos esperan recibir datos de un tipo determinado. Por ejemplo, al conectar un nĆŗmero como 2.75 a los puertos de un nodo Point.ByCoordinates, se crearĆ” correctamente un punto. Sin embargo, si se proporciona Red al mismo puerto, se producirĆ” un error.

Consejo: Coloque el cursor sobre un puerto para ver la información de herramientas que contiene el tipo de datos esperado.

  1. Etiqueta de puerto

  2. Información de herramientas

  3. Tipo de datos

  4. Valor por defecto

Estados de nodo

Dynamo proporciona una indicación del estado de ejecución del programa visual mediante la renderización de los nodos con diferentes esquemas de color en función del estado de cada nodo. La jerarquía de estados sigue esta secuencia: Error > Advertencia > Información > Vista preliminar.

Al colocar el cursor sobre el nombre o los puertos, o al hacer clic con el botón derecho en ellos, se ofrecen información y opciones adicionales.

  1. Entradas satisfactorias: un nodo con barras verticales azules sobre sus puertos de entrada estĆ” bien conectado y todas sus entradas se han conectado correctamente.

  2. Entradas insatisfactorias: un nodo con una barra vertical roja sobre uno o mƔs puertos de entrada debe tener esas entradas conectadas.

  3. Función: un nodo que genera una función y tiene una barra vertical gris sobre un puerto de salida es un nodo de función.

  4. Seleccionados: los nodos seleccionados actualmente se resaltan con un borde de color turquesa.

  5. Inutilizados: un nodo azul translúcido estÔ inutilizado, por lo que se suspende su ejecución.

  6. Vista preliminar desactivada: una barra de estado gris debajo del nodo y un icono de ojo indican que la vista preliminar de geometrĆ­a del nodo estĆ” desactivada.

  7. Advertencia: una barra de estado amarilla debajo de los nodos indica un estado de advertencia, lo que significa que no tienen datos de entrada o que pueden tener tipos de datos incorrectos.

  8. Error: una barra de estado roja debajo del nodo indica que este presenta un estado de error.

  9. Información: la barra de estado azul debajo del nodo indica el estado de información, que ofrece detalles útiles sobre los nodos. Este estado se puede activar al aproximarse a un valor mÔximo admitido por el nodo, usar un nodo de forma que pueda afectar al rendimiento, etc.

Administración de nodos de error o advertencia

Si el programa visual contiene advertencias o errores, Dynamo proporcionarÔ información adicional sobre el problema. Todos los nodos en amarillo también presentarÔn una información de herramientas sobre el nombre. Coloque el cursor sobre el icono de información de herramientas de advertencia o error para expandirlo.

Consejo: Con esta información de herramientas a mano, examine los nodos ascendentes para ver si el tipo de datos o la estructura de datos necesarios presentan errores.

  1. Información de herramientas de advertencia: el valor "null" (nulo) o la falta de datos no se pueden considerar como doble, por ejemplo, un número.

  2. Utilice el nodo Watch para examinar los datos de entrada.

  3. El nodo Number ascendente almacena "Red", no un nĆŗmero.

Bloqueo de nodos

En algunas situaciones, es posible que desee impedir la ejecución de determinados nodos del programa visual. Para ello, puede "bloquear" el nodo, que es una opción de su menú contextual.

Al bloquear un nodo, tambiƩn se bloquean los nodos que estƔn en el nivel inferior. En otras palabras, tambiƩn se bloquearƔn todos los nodos que dependan de la salida de un nodo bloqueado.

Cables

Los cables se conectan entre nodos para crear relaciones y establecer el flujo de nuestro programa visual. Podemos considerarlos literalmente como cables elƩctricos que transportan pulsos de datos de un objeto al siguiente.

Flujo del programa

Los cables conectan el puerto de salida de un nodo al puerto de entrada de otro nodo. Esta dirección establece el flujo de datos en el programa visual.

Los puertos de entrada se encuentran en el lado izquierdo de los nodos y los de salida se encuentran en el lado derecho, por lo que podemos afirmar que el flujo del programa se suele desplazar de izquierda a derecha.

Creación de cables

Cree un cable. Para ello, haga clic con el botón izquierdo en un puerto y, a continuación, haga clic con el botón izquierdo en el puerto de otro nodo para crear una conexión. Durante el proceso de creación de una conexión, el cable se mostrarÔ discontinuo y se ajustarÔ para convertirse en líneas continuas cuando se establezca correctamente la conexión.

Los datos siempre fluirÔn a través de este cable desde la salida hasta la entrada. No obstante, podemos crear el cable en cualquier dirección en cuanto a la secuencia en la que se hace clic en los puertos conectados.

Edición de cables

Con frecuencia, desearemos ajustar el flujo de programa de nuestro programa visual mediante la edición de las conexiones representadas por los cables. Para editar un cable, haga clic con el botón izquierdo en el puerto de entrada del nodo que ya estÔ conectado. Ahora tiene dos opciones:

  • Cambie la conexión a un puerto de entrada; haga clic con el botón izquierdo en otro puerto de entrada.

  • Para eliminar el cable, retire el cable y haga clic con el botón izquierdo en el espacio de trabajo.

  • Vuelva a conectar varios cables. Para ello, mantenga pulsada la tecla MayĆŗs mientras hace clic con el botón izquierdo.

  • Duplique un cable. Para ello, mantenga pulsada la tecla Ctrl mientras hace clic con el botón izquierdo.

Cables por defecto frente a resaltados

Por defecto, nuestros cables se previsualizarÔn con un trazo gris. Cuando se selecciona un nodo, se renderizarÔ cualquier cable de conexión con el mismo resaltado de color turquesa que el nodo.

  1. Cable resaltado

  2. Cable por defecto

Ocultar cables por defecto

Si prefiere ocultar los cables en el grƔfico, vaya a Vista > Conectores > desmarque Mostrar conectores.

Con este parÔmetro, solo los nodos seleccionados y sus cables de unión se mostrarÔn resaltados en turquesa claro.

Ocultar solo un cable individual

También puede ocultar el conductor seleccionado. Para ello, haga clic con el botón derecho en la salida Nodos > seleccione Ocultar cables.

Biblioteca

La biblioteca contiene todos los nodos cargados, incluidos los 10 nodos de categorías por defecto que se suministran con la instalación, así como los paquetes o los nodos personalizados cargados de forma adicional. Los nodos de la biblioteca se organizan jerÔrquicamente en bibliotecas, categorías y, si procede, subcategorías.

  • Nodos bĆ”sicos: se incluye con la instalación por defecto.

  • Nodos personalizados: almacene las rutinas o los grĆ”ficos especiales utilizados con frecuencia como nodos personalizados. TambiĆ©n puede compartir los nodos personalizados con la comunidad.

  • Nodos de Package Manager: colección de nodos personalizados publicados.

Repasaremos las categorías de jerarquía de nodos, mostraremos cómo realizar rÔpidamente búsquedas en la biblioteca y conoceremos algunos de los nodos utilizados con frecuencia.

JerarquĆ­a de categorĆ­as de la biblioteca

La exploración a través de estas categorías es la manera mÔs rÔpida de conocer la jerarquía de lo que podemos añadir a nuestro espacio de trabajo y la mejor forma de descubrir nuevos nodos que no ha utilizado antes.

Examine la biblioteca. Para ello, haga clic en los menĆŗs para expandir cada categorĆ­a y su subcategorĆ­a.

NĆŗcleo y GeometrĆ­a son excelentes menĆŗs para empezar a explorar, ya que contienen la mayor cantidad de nodos.

  1. Biblioteca

  2. CategorĆ­a

  3. SubcategorĆ­a

  4. Nodo

Estos clasifican aún mÔs los nodos en la misma subcategoría en función si los nodos crean datos, ejecutan una acción o consultan datos.

  • Crear: cree o construya una geometrĆ­a desde cero. Por ejemplo, un cĆ­rculo.

  • Acción: realice una acción en un objeto. Por ejemplo, ajuste la escala de un cĆ­rculo.

  • Consulta: obtenga una propiedad de un objeto existente. Por ejemplo, obtenga el radio de un cĆ­rculo.

Coloque el puntero en un nodo para visualizar información mÔs detallada, ademÔs de su nombre e icono. Esto nos permite conocer rÔpidamente lo que realiza el nodo, lo que necesitarÔ para las entradas y lo que proporcionarÔ como salida.

  1. Descripción: descripción del nodo en lenguaje normal.

  2. Icono: versión mÔs grande del icono en el menú Biblioteca.

  3. Entrada(s): el nombre, y el tipo y la estructura de datos.

  4. Salida(s): el tipo y la estructura de datos.

Búsqueda rÔpida en la biblioteca

Si sabe con precisión relativa qué nodo desea añadir al espacio de trabajo, especifíquelo en el campo Buscar para buscar todos los nodos coincidentes.

Haga clic en el nodo que desea aƱadir o pulse Intro para aƱadir los nodos resaltados al centro del espacio de trabajo.

Buscar por jerarquĆ­a

AdemÔs de utilizar palabras clave para intentar encontrar nodos, podemos escribir la jerarquía separada por un punto en el campo de búsqueda o con bloques de código (que utilizan el lenguaje textual de Dynamo).

La jerarquƭa de cada biblioteca se refleja en el nombre de los nodos aƱadidos al espacio de trabajo.

Al escribir distintas partes de la ubicación del nodo en la jerarquía de biblioteca con el formato library.category.nodeName, se obtienen resultados diferentes.

  • library.category.nodeName

  • category.nodeName

  • nodeName o keyword

Por lo general, el nombre del nodo en el espacio de trabajo se renderizarĆ” con el formato category.nodeName, con algunas excepciones destacadas, sobre todo, en las categorĆ­as de entrada y vista.

Tenga en cuenta la diferencia de categorĆ­a en nodos con nombres similares:

  • Los nodos de la mayorĆ­a de las bibliotecas incluirĆ”n el formato de categorĆ­a.

  • Point.ByCoordinates y UV.ByCoordinates tienen el mismo nombre, pero proceden de diferentes categorĆ­as.

  • Entre las excepciones destacables, se incluyen las funciones integradas, Core.Input, Core.View y los operadores.

Nodos utilizados frecuentemente

Con cientos de nodos incluidos en la instalación bÔsica de Dynamo, ¿cuÔles son fundamentales para desarrollar nuestros programas visuales? Veamos los parÔmetros de nuestro programa (Input), consultemos los resultados de la acción de un nodo (Watch) y definamos entradas o funciones mediante un acceso directo (Code Block).

Nodos de entrada

Los nodos de entrada son el principal medio para que el usuario de nuestro programa visual (ya sea usted mismo u otro usuario) interactúe con los parÔmetros clave. A continuación, se muestran algunos de la biblioteca principal:

Nodo
Nodo

Booleano

NĆŗmero

Cadena

Control deslizante de nĆŗmero

Ruta de directorio

Control deslizante de entero

Ruta de archivo

Watch y Watch3D

Los nodos de visualización, Watch, son esenciales para administrar los datos que se ejecutan a través del programa visual. Puede ver el resultado de un nodo a través de la vista preliminar de datos del nodo. Para ello, coloque el cursor sobre el nodo.

SerĆ” Ćŗtil mantenerlo visible en un nodo Watch.

O bien, consulte los resultados de la geometrƭa a travƩs de un nodo Watch3D.

Ambos se encuentran en la categorĆ­a de vista de la biblioteca principal.

Consejo: En ocasiones, la vista preliminar 3D puede ser molesta cuando el programa visual contiene muchos nodos. Considere la posibilidad de desactivar la opción Mostrando vista preliminar 3D en segundo plano en el menú Configuración y utilizar un nodo Watch3D para obtener una vista preliminar de la geometría.

Bloque de código

Los nodos de bloque de código, Code Block, se pueden utilizar para definir un bloque de código con líneas separadas por signos de punto y coma. Esto puede ser tan sencillo como X/Y.

También podemos utilizar bloques de código como un acceso directo para definir una entrada de número o una llamada a la función de otro nodo. La sintaxis para esta acción sigue la convención de nomenclatura del lenguaje textual de Dynamo, DesignScript.

A continuación, se muestra una sencilla demostración (con instrucciones) de uso del bloque de código en la secuencia de comandos.

  1. Haga doble clic para crear un nodo de bloque de código.

  2. Escriba Circle.ByCenterPointRadius(x,y);

  3. Haga clic en el espacio de trabajo para borrar la selección; se añadirÔn automÔticamente las entradas x y y.

  4. Cree un nodo Point.ByCoordinates y un control deslizante de número; a continuación, conecte las entradas al bloque de código.

  5. El resultado de la ejecución del programa visual se muestra como un círculo en la vista preliminar 3D.

Datos

Los datos son el contenido de nuestros programas. Viajan a través de cables proporcionando entradas a los nodos, donde se procesan y se transforman en una nueva forma de datos de salida. Revisemos la definición de los datos, cómo se estructuran y cómo utilizarlos en Dynamo.

¿Qué son los datos?

Los datos son un conjunto de valores de variables cualitativas o cuantitativas. La forma de datos mÔs sencilla son números como, por ejemplo, 0, 3.14 o 17. Sin embargo, los datos también puede ser de diferentes tipos: una variable que representa números cambiantes (height); caracteres (myName); geometría (Circle), o una lista de elementos de datos (1,2,3,5,8,13,...).

En Dynamo, añadimos o introducimos datos en los puertos de entrada de los nodos; podemos tener datos sin acciones, pero nos hacen falta datos para procesar las acciones que representan nuestros nodos. Cuando se añade un nodo al espacio de trabajo, si no se le proporciona ninguna entrada, el resultado serÔ una función y no el resultado de la acción en sí.

Datos y acciones
  1. Datos simples.

  2. Datos y una acción (un nodo); se ejecuta correctamente.

  3. Una acción (un nodo) sin entradas de datos; devuelve una función genérica.

Nulo: ausencia de datos

Cuidado con los valores nulos. El tipo 'null' representa la ausencia de datos. Aunque se trata de un concepto abstracto, es probable que esto ocurra mientras trabaja con programación visual. Si una acción no crea un resultado vÔlido, el nodo devolverÔ un valor "null".

Comprobar si existen valores "null" y eliminarlos de la estructura de datos es una parte crucial para crear programas sólidos.

Icono
Nombre/sintaxis
Entradas
Salidas

Object.IsNull

obj

bool

Estructuras de datos

Cuando somos programadores visuales, podemos generar una gran cantidad de datos rÔpidamente y requerir un medio de administración de su jerarquía. Esta es la función de las estructuras de datos, los esquemas organizativos en los que almacenamos los datos. Las características específicas de las estructuras de datos y su uso varían de un lenguaje de programación a otro.

En Dynamo, se aƱade jerarquƭa a los datos a travƩs de las listas. Exploraremos esto en profundidad en capƭtulos posteriores, pero empecemos con algo sencillo.

Una lista representa una colección de elementos colocados en una estructura de datos:

  • Tengo cinco dedos (elementos) en la mano (lista).

  • Hay diez casas (elementos) en mi calle (lista).

Desglose de lista
  1. Un nodo Number Sequence define una lista de nĆŗmeros mediante entradas start, amount y step. Con estos nodos, hemos creado dos listas independientes de diez nĆŗmeros, una que abarca de 100 a 109 y otra de 0 a 9.

  2. El nodo List.GetItemAtIndex selecciona un elemento de una lista en un Ć­ndice determinado. Al seleccionar 0, se obtiene el primer elemento de la lista (100 en este caso).

  3. Al aplicar el mismo proceso a la segunda lista, obtenemos un valor de 0, el primer elemento de la lista.

  4. Ahora combinamos las dos listas en una mediante el nodo List.Create. Observe que el nodo crea una lista de listas. Esto cambia la estructura de los datos.

  5. Al volver a utilizar List.GetItemAtIndex, con el índice establecido en 0, se obtiene la primera lista de la lista de listas. Esto es lo que significa tratar una lista como un elemento, lo cual es ligeramente diferente de otros lenguajes de secuencias de comandos. En capítulos posteriores, nos adentraremos mÔs en la manipulación de listas y la estructura de datos.

El concepto clave para comprender la jerarquía de datos en Dynamo es que en relación con la estructura de datos, las listas se consideran elementos. En otras palabras, Dynamo funciona con un proceso descendente para comprender las estructuras de datos. Implicaciones VeÔmoslo con un ejemplo.

Ejercicio: uso de datos para crear una cadena de cilindros

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

12KB
Building Blocks of Programs - Data.dyn
Open

En este primer ejemplo, vamos a ensamblar un cilindro vaciado que recorre la jerarquía de geometría tratada en esta sección.

Parte I: configurar el grƔfico de un cilindro con algunos parƔmetros modificables

1. Añada Point.ByCoordinates: después de añadir el nodo al lienzo, se muestra un punto en el origen de la rejilla de vista preliminar de Dynamo. Los valores por defecto de las entradas x, y y z son 0,0, lo que nos da un punto en esta ubicación.

2. Plane.ByOriginNormal: el siguiente paso en la jerarquĆ­a de geometrĆ­a es un plano. Existen varias formas de construir un plano; utilizaremos un origen y una normal para la entrada. El origen es el nodo de punto creado en el paso anterior.

Vector.ZAxis: es un vector unificado en la dirección Z. Observe que no hay entradas, solo un vector con un valor [0,0,1]. Se utiliza como la entrada normal para el nodo Plane.ByOriginNormal. Esto nos proporciona un plano rectangular en la vista preliminar de Dynamo.

3. Circle.ByPlaneRadius: ascendiendo en la jerarquƭa, ahora creamos una curva a partir del plano del paso anterior. DespuƩs de conectar el nodo, se obtiene un cƭrculo en el origen. El radio por defecto del nodo es el valor de 1.

4. Curve.Extrude: ahora vamos a hacer que este elemento crezca dÔndole profundidad y añadiendo la tercera dimensión. Este nodo crea una superficie a partir de una curva mediante su extrusión. La distancia por defecto en el nodo es 1 y debería aparecer un cilindro en la ventana grÔfica.

5. Surface.Thicken: este nodo nos proporciona un sólido cerrado mediante el desfase de la superficie con la distancia especificada y el cierre de la forma. El valor de grosor por defecto es 1 y vemos un cilindro vaciado en la ventana grÔfica en línea con estos valores.

6. Number Slider: en lugar de utilizar los valores por defecto para todas estas entradas, vamos a añadir algún control paramétrico al modelo.

Edición del dominio: después de añadir el control deslizante de número al lienzo, haga clic en el signo de intercalación situado en la parte superior izquierda para ver las opciones de dominio.

Min/Max/Step: cambie los valores min, max y step a 0, 2 y 0,01 respectivamente. Esto lo hacemos para controlar el tamaƱo de la geometrƭa global.

7. Nodos Number Slider: en todas las entradas por defecto, copiemos y peguemos este control deslizante de número (seleccione el control deslizante, pulse Ctrl+C y, a continuación, Ctrl+V) varias veces hasta que todas las entradas con valores por defecto tengan un control deslizante. Algunos de los valores del control deslizante tendrÔn que ser mayores que cero para que la definición funcione (es decir, para que una superficie se engrose, se necesita una profundidad de extrusión).

8. Hemos creado un cilindro paramétrico vaciado con estos controles deslizantes. Pruebe a modificar algunos de estos parÔmetros y ver cómo la geometría se actualiza de forma dinÔmica en la ventana grÔfica de Dynamo.

Nodos Number Slider: al avanzar en este ejemplo, hemos añadido muchos controles deslizantes al lienzo y debemos limpiar la interfaz de la herramienta que acabamos de crear. Haga clic con el botón derecho en un control deslizante, seleccione "Cambiar nombre" y cambie cada control deslizante al nombre apropiado para su parÔmetro (Grosor, Radio, Altura, etc.).

Parte II: llenar la matriz de cilindros de la parte I

9. En este punto, hemos creado un fantÔstico elemento de cilindro engrosado. Se trata de un objeto actualmente; veamos cómo crear una matriz de cilindros que permanezca enlazada de forma dinÔmica. Para ello, vamos a crear una lista de cilindros en lugar de trabajar con un único elemento.

Adición (+): nuestro objetivo es añadir una fila de cilindros junto al cilindro que hemos creado. Si se desea añadir un cilindro adyacente al actual, se deben tener en cuenta el radio del cilindro y el grosor del vaciado. Para obtener este número, se añaden los dos valores de los controles deslizantes.

10. Este paso es mÔs complejo, por lo que pasaremos por él mÔs lentamente. El objetivo es crear una lista de números que defina las ubicaciones de cada cilindro en una fila.

a. Multiplicación: deseamos multiplicar primero el valor del paso anterior por 2. El valor del paso anterior representa un radio y queremos mover el cilindro por el diÔmetro completo.

b. Number Sequence: creamos una matriz de números con este nodo. La primera entrada es el nodo de multiplicación del paso anterior en el valor step. El valor start se puede establecer en 0,0 mediante un nodo Number.

c. Control deslizante de enteros: para el valor amount, conectamos un control deslizante de entero. Esto definirƔ cuƔntos cilindros se crean.

d. Salida: esta lista muestra la distancia desplazada para cada cilindro de la matriz y la manejan paramƩtricamente los controles deslizantes originales.

11. Este paso es bastante sencillo: conecte la secuencia definida en el paso anterior a la entrada x del Point.ByCoordinates original. De este modo, se sustituye el control deslizante pointX, que se puede suprimir Ahora vemos una matriz de cilindros en la ventana grÔfica (asegúrese de que el control deslizante de enteros sea mayor que 0).

12. La cadena de cilindros sigue enlazada dinÔmicamente a todos los controles deslizantes. Mueva cada uno de los controles deslizantes para ver cómo se actualiza la definición.

Renombrar estructuras

Al añadir tuberías y estructuras a una red de tuberías, Civil 3D utiliza una plantilla para asignar nombres automÔticamente. Por lo general, esto es suficiente durante la colocación inicial, pero inevitablemente los nombres tendrÔn que cambiar en el futuro a medida que evolucione el diseño. AdemÔs, hay muchos patrones de nomenclatura diferentes que podrían ser necesarios, por ejemplo, denominar las estructuras de forma secuencial dentro de un tramo de tuberías empezando por la estructura mÔs alejada aguas abajo o seguir un patrón de nomenclatura que se ajuste al esquema de datos de un organismo local. En este ejemplo, se muestra cómo se puede utilizar Dynamo para definir cualquier tipo de estrategia de nomenclatura y aplicarla de forma coherente.

Objetivo

šŸŽÆ Cambie el nombre de las estructuras de red de tuberĆ­as en orden segĆŗn el etiquetado en formato P.K. de una alineación.

Conceptos clave

  • Trabajo con cuadros delimitadores

  • Filtrado de datos mediante el nodo List.FilterByBoolMask

  • Ordenación de los datos mediante el nodo List.SortByKey

  • Generación y modificación de cadenas de texto

Compatibilidad con versiones

Este grƔfico se ejecutarƔ en Civil 3D 2020 y versiones posteriores.

Conjunto de datos

Descargue primero los archivos de ejemplo que aparecen a continuación y abra el archivo DWG y el grÔfico de Dynamo.

139KB
Utilities_RenameStructures.dyn
Open
6MB
Utilities_RenameStructures.dwg
Open

Solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Seleccionar las estructuras por capa

  2. Obtener las ubicaciones de estructuras

  3. Filtrar las estructuras por desfase y, a continuación, ordenarlas por P.K.

  4. Generar los nuevos nombres

  5. Renombrar las estructuras

”Empecemos!

Seleccionar estructuras

Lo primero que debemos hacer es seleccionar todas las estructuras con las que tenemos previsto trabajar. Para ello, basta con seleccionar todos los objetos de una capa determinada, lo que significa que podemos seleccionar estructuras de diferentes redes de tuberĆ­as (siempre que compartan la misma capa).

Selección de estructuras en la capa especificada
  1. Este nodo garantiza que no se recuperarƔn accidentalmente los tipos de objeto no deseados que puedan compartir la misma capa que las estructuras.

Obtener ubicaciones de estructuras

Ahora que disponemos de las estructuras, tenemos que averiguar su posición en el espacio para poder ordenarlas según su ubicación. Para ello, utilizaremos el cuadro delimitador de cada objeto. El cuadro delimitador de un objeto es el cuadro de tamaño mínimo que contiene por completo la extensión geométrica del objeto. Al calcular el centro del cuadro delimitador, obtenemos una aproximación bastante precisa del punto de inserción de la estructura.

Uso de cuadros delimitadores para obtener el punto de inserción aproximado de cada estructura

Utilizaremos estos puntos para obtener el P.K. y el desfase de las estructuras con respecto a una alineación seleccionada.

Filtrar y ordenar

Aquí es donde las cosas empiezan a ponerse un poco complicadas. En esta fase, tenemos una gran lista de todas las estructuras de la capa que hemos especificado y elegimos una alineación por la que deseamos ordenarlas. El problema es que puede haber estructuras en la lista que no deseamos cambiar de nombre. Por ejemplo, es posible que no formen parte del tramo concreto que nos interesa.

  1. La alineación seleccionada

  2. Las estructuras que deseamos renombrar

  3. Las estructuras que se deben ignorar

Por lo tanto, debemos filtrar la lista de estructuras para que no se tengan en cuenta las que superen un determinado desfase con respecto a la alineación. La mejor forma de conseguirlo es mediante el nodo List.FilterByBoolMask. Después de filtrar la lista de estructuras, utilizamos el nodo List.SortByKey para ordenarlas por sus valores de P.K.

Si es la primera vez que trabaja con listas, consulte la sección Trabajo con listas.

Filtrado y ordenación de las estructuras
  1. Compruebe si el desfase de la estructura es menor que el valor del umbral.

  2. Sustituya cualquier valor nulo por false (falso).

  3. Filtre la lista de estructuras y P.K.

  4. Ordene las estructuras por P.K.

Generar nombres nuevos

La última parte del trabajo consiste en crear los nuevos nombres de las estructuras. El formato que usaremos es <alignment name>-STRC-<number>. Aquí hay algunos nodos mÔs para rellenar los números con ceros adicionales si se desea (por ejemplo, "01" en lugar de "1").

Generación de los nuevos nombres de las estructuras

Renombrar estructuras

Y, por Ćŗltimo, pero no por ello menos importante, cambiamos el nombre de las estructuras.

Establecer los nombres de las estructuras

Resultado

A continuación, se muestra un ejemplo de cómo ejecutar el grÔfico con el Reproductor de Dynamo.

Ejecución del grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en Civil 3D

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección Reproductor de Dynamo.

šŸŽ‰ Ā”Misión cumplida!

Información adicional: visualización en Dynamo

Puede ser útil aprovechar la vista preliminar 3D en segundo plano de Dynamo para visualizar las salidas intermedias del grÔfico en lugar de solo el resultado final. Algo fÔcil que podemos hacer es visualizar los cuadros delimitadores de las estructuras. AdemÔs, este conjunto de datos concreto tiene una obra lineal en el documento, por lo que podemos incorporar la geometría de línea característica de obra lineal en Dynamo para proporcionar contexto en relación con la ubicación de las estructuras en el espacio. Si el grÔfico se utiliza en un conjunto de datos sin obras lineales, estos nodos no harÔn nada.

Visualización de la geometría de estructuras y líneas características de obra lineal

Ahora podemos entender mejor cómo funciona el proceso de filtrado de las estructuras por desfase.

Ajuste del valor de umbral de desfase de alineación y visualización de las estructuras afectadas en Dynamo

Ideas

A continuación, se ofrecen algunas ideas sobre cómo podría ampliar las posibilidades de este grÔfico.

Cambie el nombre de las estructuras en función de su alineación mÔs cercana en lugar de seleccionar una alineación específica.

Cambie el nombre de las tuberƭas, ademƔs del de las estructuras.

Establezca las capas de las estructuras en función del tramo.

Documentación

La edición de parÔmetros para la documentación sigue la misma dinÔmica que las lecciones aprendidas en las secciones anteriores. En esta sección, vamos a ver cómo editar parÔmetros que no afectan a las propiedades geométricas de un elemento, sino que preparan un archivo de Revit para la documentación.

Desviación

En el siguiente ejercicio, utilizaremos una desviación bÔsica del nodo del plano para crear una hoja de Revit para la documentación. Cada panel de nuestra estructura de cubierta definida paramétricamente tiene un valor diferente para la desviación, y queremos invocar el rango de valores mediante el color y la planificación de los puntos adaptativos para entregarlos a un consultor, ingeniero o contratista de fachadas.

desviación

La desviación desde el nodo del plano calcula la distancia en que el conjunto de cuatro puntos varía con respecto al plano de ajuste óptimo entre ellos. Esta es una forma rÔpida y sencilla de estudiar la viabilidad de la construcción.

Ejercicio

Parte I: definición del coeficiente de apertura de los paneles en función de la desviación desde el nodo de plano

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

5MB
Revit-Documenting.zip
archive
Open

Empiece con el archivo de Revit para esta sección (o continúe desde la sección anterior). Este archivo tiene una matriz de paneles ETFE en la cubierta. Haremos referencia a estos paneles en este ejercicio.

  1. AƱada un nodo Family Types al lienzo y seleccione "ROOF-PANEL-4PT".

  2. Conecte este nodo a un nodo Select All Elements of Family Type para obtener todos los elementos de Revit en Dynamo.

  1. Consulte la ubicación de los puntos adaptativos de cada elemento con el nodo AdaptiveComponent.Locations.

  2. Cree un polígono a partir de estos cuatro puntos con el nodo Polygon.ByPoints. Observe que ahora tenemos una versión abstracta del sistema de paneles en Dynamo sin tener que importar la geometría completa del elemento de Revit.

  3. Calcule la desviación plana con el nodo Polygon.PlaneDeviation.

Solo por probar, como en el ejercicio anterior, vamos a configurar el coeficiente de apertura de cada panel en función de su desviación plana.

  1. Añada un nodo Element.SetParameterByName al lienzo y conecte los componentes adaptativos a la entrada element. Conecte un bloque de código con el texto "Aperture Ratio" a la entrada parameterName.

  2. No se pueden conectar directamente los resultados de la desviación a la entrada "value" porque es necesario volver a asignar los valores al rango de parÔmetros.

  1. Con Math.RemapRange, vuelva a asignar los valores de desviación a un dominio entre 0,15 y 0,45. Para ello, introduzca 0.15; 0.45; en el bloque de código.

  2. Conecte estos resultados a la entrada "value" de Element.SetParameterByName.

De vuelta en Revit, podemos ver aproximadamente el cambio en la apertura a travƩs de la superficie.

Ejercicio

Al ampliar, resulta mÔs evidente que los paneles cerrados estÔn ponderados hacia las esquinas de la superficie. Las esquinas abiertas se orientan hacia la parte superior. Las esquinas representan Ôreas de mayor desviación, mientras que la curvatura es mínima, lo cual tiene sentido.

Ejercicio

Parte II: color y documentación

La configuración de la relación de apertura no demuestra claramente la desviación de los paneles de la cubierta; ademÔs, se cambia la geometría del elemento real. Supongamos que solo queremos estudiar la desviación desde el punto de vista de la viabilidad de fabricación. Sería útil colorear los paneles según el rango de desviación para la documentación. Esto se puede realizar con la serie de pasos que se indican a continuación y en un proceso muy similar a los pasos anteriores.

  1. Elimine Element.SetParameterByName y sus nodos de entrada, y aƱada Element.OverrideColorInView.

  2. Añada un nodo Color Range al lienzo y conéctelo a la entrada color de Element.OverrideColorInView. Aún tenemos que conectar los valores de desviación con el rango de color para crear el degradado.

  3. Al pasar el ratón sobre la entrada value, podemos ver que los valores de la entrada deben estar entre 0 y 1 para asignar un color a cada valor. Es necesario reasignar los valores de desviación a este rango.

  1. Mediante Math.RemapRange, vuelva a asignar los valores de desviación plana a un rango entre 0 y 1 (también puede utilizar el nodo "MapTo" para definir un dominio de origen).

  2. Conecte los resultados en un nodo Color Range.

  3. Observe que nuestra salida es un rango de colores en lugar de un rango de nĆŗmeros.

  4. Si se ha establecido la opción Manual, pulse Ejecutar. A partir de este momento, todo debería funcionar según lo esperado estableciendo la opción AutomÔtico.

Al regresar a Revit, vemos un degradado mucho mÔs legible que es representativo de la desviación plana basada en nuestro rango de colores. Pero, ¿qué pasa si queremos personalizar los colores? Observe que los valores de desviación mínima se representan en rojo, que parece ser lo opuesto a lo que se esperaría. Queremos que la desviación mÔxima sea roja y que la desviación mínima esté representada por un color mÔs suave. Volvamos a Dynamo y solucionemos esto.

  1. Mediante un bloque de código, añada dos números en dos líneas diferentes: 0; y 255;.

  2. Cree los colores rojo y azul mediante la conexión de los valores adecuados a dos nodos Color.ByARGB.

  3. Cree una lista a partir de estos dos colores.

  4. Conecte esta lista a la entrada colors del nodo Color Range y observe cómo se actualiza el rango de colores personalizado.

De vuelta en Revit, ahora podemos entender mejor las Ôreas de mÔxima desviación en las esquinas. Recuerde que este nodo se utiliza para modificar un color en una vista, por lo que puede resultar muy útil si tenemos una hoja concreta en el conjunto de dibujos que se centra en un tipo de anÔlisis concreto.

Ejercicio

Parte III: planificación

Al seleccionar un panel ETFE en Revit, vemos que hay cuatro parƔmetros de ejemplar: XYZ1, XYZ2, XYZ3 y XYZ4. Todos estƔn en blanco despuƩs de crearlos. Se trata de parƔmetros basados en texto y necesitan valores. Utilizaremos Dynamo para escribir las ubicaciones de puntos adaptativos en cada parƔmetro. Esto aumenta la interoperabilidad si es necesario enviar la geometrƭa a un ingeniero o consultor de fachadas.

En un plano de ejemplo, tenemos una tabla de planificación grande y vacía. Los parÔmetros XYZ son parÔmetros compartidos en el archivo de Revit, lo que nos permite añadirlos a la tabla de planificación.

Ejercicio

Al ampliar, vemos que los parÔmetros XYZ aún no se han rellenado. Revit se ocupa de los dos primeros parÔmetros.

Ejercicio

Para escribir estos valores, realizaremos una operación de lista compleja. El grÔfico en sí es sencillo, pero los conceptos se hacen mÔs complejos a partir de la asignación de lista, como se explica en el capítulo sobre las listas.

  1. Seleccione todos los componentes adaptativos con dos nodos.

  2. Extraiga la ubicación de cada punto con AdaptiveComponent.Locations.

  3. Convierta estos puntos en cadenas. Recuerde que el parƔmetro se basa en texto, por lo que es necesario introducir el tipo de datos correcto.

  4. Cree una lista de las cuatro cadenas que definen los parƔmetros que se van a cambiar: XYZ1, XYZ2, XYZ3 y XYZ4.

  5. Conecte esta lista a la entrada parameterName de Element.SetParameterByName.

  6. Conecte Element.SetParameterByName en la entrada combinator de List.Combine. Conecte los componentes adaptativos en list1. Conecte String from Object a list2.

Estamos asignando listas porque vamos a escribir cuatro valores para cada elemento, lo que crea una estructura de datos compleja. El nodo List.Combine define una operación un escalón mÔs abajo en la jerarquía de datos. Por este motivo, las entradas "element" y "value" de Element.SetParameterByName se dejan en blanco. List.Combine conecta las sublistas de sus entradas a las entradas vacías de Element.SetParameterByName en función del orden en el que estÔn conectadas.

Al seleccionar un panel en Revit, ahora vemos que hay valores de cadena para cada parƔmetro. En tƩrminos realistas, crearƭamos un formato mƔs sencillo para escribir un punto (X,Y,Z). Esto se puede realizar con operaciones de cadena en Dynamo, pero vamos a omitir este paso para mantenernos dentro del Ɣmbito de este capƭtulo.

Vista de la tabla de planificación de muestra con los parÔmetros completados.

Cada panel ETFE tiene ahora las coordenadas XYZ escritas para cada punto adaptativo, con lo que se representan las esquinas de cada panel para la fabricación.

Ejercicio

Colocación de farolas

Uno de los muchos y excelentes casos de uso de Dynamo es la colocación dinÔmica de objetos discretos a lo largo de un modelo de obra lineal. A menudo, es necesario colocar objetos en ubicaciones independientes de los ensamblajes insertados a lo largo de la obra lineal, lo que resulta una tarea muy tediosa de realizar manualmente. Y, cuando la geometría horizontal o vertical de la obra lineal cambia, esto suele ir acompañado de un importante trabajo de rectificación.

Objetivo

šŸŽÆ Coloque referencias a bloque de farolas a lo largo de una obra lineal en los valores de P.K. especificados de un archivo de Excel.

Conceptos clave

  • Lectura de datos de un archivo externo (en este caso, Excel)

  • Organización de datos en diccionarios

  • Uso de sistemas de coordenadas para controlar la posición/escala/rotación

  • Colocación de referencias a bloque

  • Visualización de geometrĆ­a en Dynamo

Compatibilidad con versiones

Este grƔfico se ejecutarƔ en Civil 3D 2020 y versiones posteriores.

Conjunto de datos

Descargue primero los archivos de ejemplo que aparecen a continuación y abra el archivo DWG y el grÔfico de Dynamo.

Es preferible que el archivo de Excel se guarde en el mismo directorio que el grƔfico de Dynamo.

232KB
Roads_CorridorBlockRefs (1).dyn
Open
54MB
Roads_CorridorBlockRefs.dwg
Open
12KB
LightPoles.xlsx
Open

Solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Leer el archivo de Excel e importar los datos en Dynamo

  2. Obtener lĆ­neas caracterĆ­sticas de la lĆ­nea base de obra lineal especificada

  3. Generar sistemas de coordenadas a lo largo de la lĆ­nea caracterĆ­stica de obra lineal en los P.K. deseados

  4. Utilizar los sistemas de coordenadas para colocar referencias a bloque en el espacio modelo

”Empecemos!

Obtener datos de Excel

En este grƔfico de ejemplo, vamos a utilizar un archivo de Excel a fin de almacenar los datos que utilizarƔ Dynamo para colocar las referencias a bloque de farolas. La tabla presenta el siguiente aspecto.

Estructura de la tabla del archivo de Excel

El uso de Dynamo para leer datos de un archivo externo (como un archivo de Excel) es una excelente estrategia, sobre todo, cuando los datos deben compartirse con otros miembros del equipo.

Los datos de Excel se importan en Dynamo de este modo.

Importación de datos de Excel en Dynamo

Ahora que tenemos los datos, debemos dividirlos por columna (Corridor, Baseline, PointCode, etc.) para poder utilizarlos en el resto del grÔfico. Para ello, lo habitual es utilizar el nodo List.GetItemAtIndex y especificar el número de índice de cada columna que deseemos. Por ejemplo, la columna Corridor se encuentra en el índice 0, la columna Baseline en el índice 1, etc.

Parece lógico, ¿verdad? Sin embargo, este planteamiento puede plantear un problema. ¿Qué ocurre si el orden de las columnas del archivo de Excel cambia en el futuro? ¿O se añade una nueva columna entre otras dos? En ese caso, el grÔfico no funcionarÔ correctamente y deberÔ actualizarse. Podemos preparar el grÔfico para el futuro incluyendo los datos en un diccionario, con los encabezados de las columnas de Excel como claves y el resto de los datos como valores.

Si es la primera vez que utiliza estos diccionarios, consulte la sección Diccionarios en Dynamo.

Colocación de datos de Excel en un diccionario

Esto permite que el grÔfico sea mÔs flexible a la hora de cambiar el orden de las columnas en Excel. Mientras los encabezados de las columnas sigan siendo los mismos, los datos podrÔn recuperarse simplemente del diccionario mediante su clave (es decir, el encabezado de columna), que es lo que haremos a continuación.

Recuperación de datos del diccionario

Obtener lĆ­neas caracterĆ­sticas de obra lineal

Ahora que ya tenemos los datos de Excel importados y listos, empecemos a utilizarlos para obtener información de Civil 3D sobre los modelos de obra lineal.

  1. Seleccione el modelo de obra lineal por su nombre.

  2. Obtenga una lĆ­nea base especĆ­fica en la obra lineal.

  3. Obtenga una línea característica dentro de la línea base mediante su código de punto.

Generar sistemas de coordenadas

Ahora vamos a generar sistemas de coordenadas a lo largo de las líneas características de obra lineal en los valores de P.K. especificados del archivo de Excel. Estos sistemas de coordenadas se utilizarÔn para definir la posición, la rotación y la escala de las referencias a bloque de las farolas.

Si es la primera vez que utiliza los sistemas de coordenadas, consulte la sección Vector, plano y sistema de coordenadas.

Obtención de sistemas de coordenadas a lo largo de las líneas características de obra lineal

Observe aquí el uso de un bloque de código para rotar los sistemas de coordenadas en función del lado de la línea base en el que se encuentren. Esto podría lograrse mediante una secuencia de varios nodos, pero este es un buen ejemplo de una situación en la que es mÔs fÔcil simplemente escribirlo.

Si es la primera vez que utiliza bloques de código, consulte la sección Bloques de código y DesignScript.

Crear referencias a bloque

Ya casi hemos terminado. Disponemos de toda la información necesaria para poder colocar realmente las referencias a bloque. Lo primero que hay que hacer es obtener las definiciones de bloque que deseamos mediante la columna BlockName del archivo de Excel.

Obtención de las definiciones de bloque que deseamos del documento

A continuación, el último paso es crear las referencias a bloque.

Creación de referencias a bloque en el espacio modelo

Resultado

Al ejecutar el grÔfico, deberían aparecer nuevas referencias a bloque en el espacio modelo a lo largo de la obra lineal. Y esta es la mejor parte: si el modo de ejecución del grÔfico se ha establecido en AutomÔtico y edita el archivo de Excel, las referencias de bloque se actualizan automÔticamente.

Puede obtener mÔs información sobre los modos de ejecución de grÔficos en la sección Interfaz de usuario.

Realización de cambios en el archivo de Excel y visualización rÔpida de los resultados en Civil 3D

A continuación, se muestra un ejemplo de cómo ejecutar el grÔfico con el Reproductor de Dynamo.

Ejecución del grÔfico mediante el Reproductor de Dynamo y visualización de los resultados en Civil 3D

Si es la primera vez que utiliza el Reproductor de Dynamo, consulte la sección Reproductor de Dynamo.

šŸŽ‰ Ā”Misión cumplida!

Información adicional: visualización en Dynamo

Puede resultar útil visualizar la geometría de obra lineal en Dynamo para ofrecer algo de contexto. Este modelo concreto incluye sólidos de obra lineal extraídos en el espacio modelo, por lo que vamos a incorporarlos en Dynamo.

Sin embargo, hay algo mÔs que debemos tener en cuenta. Los sólidos son un tipo de geometría relativamente "pesado", lo que significa que esta operación ralentizarÔ el grÔfico. Se agradecería que hubiera una forma sencilla de elegir si deseamos ver los sólidos o no. La respuesta obvia es simplemente desconectar el nodo Corridor.GetSolids, pero eso generarÔ advertencias para todos los nodos posteriores, lo que resulta algo lioso. Esta es una situación en la que el nodo ScopeIf realmente es de gran utilidad.

  1. Observe que el nodo Object.Geometry presenta una barra gris en la parte inferior. Esto significa que la vista preliminar del nodo estÔ desactivada (para acceder a ella, haga clic con el botón derecho en el nodo), lo que permite que GeometryColor.ByGeometryColor evite entrar en conflicto con otra geometría para obtener prioridad de visualización en la vista preliminar en segundo plano.

  2. El nodo ScopeIf permite bÔsicamente ejecutar de forma selectiva una ramificación completa de nodos. Si la entrada test se ha establecido en "falso", no se ejecutarÔ ningún nodo conectado al nodo ScopeIf.

Este es el resultado de la vista preliminar en segundo plano de Dynamo.

Visualización de la geometría de obra lineal en Dynamo

Ideas

A continuación, se ofrecen algunas ideas sobre cómo podría ampliar las posibilidades de este grÔfico.

Añada una columna de rotación al archivo de Excel y utilícela para controlar la rotación de los sistemas de coordenadas.

AƱada desfases horizontales o verticales al archivo de Excel para que las farolas puedan desviarse de la lƭnea caracterƭstica de obra lineal si es necesario.

En lugar de utilizar un archivo de Excel con valores de P.K., genere estos valores directamente en Dynamo mediante un P.K. inicial y una separación típica.

Creación de un nodo personalizado

Dynamo ofrece varios métodos diferentes para crear nodos personalizados. Puede crear nodos personalizados desde cero, a partir de un grÔfico existente o de forma explícita en C#. En esta sección, vamos a cubrir la generación de un nodo personalizado en la interfaz de usuario de Dynamo a partir de un grÔfico existente. Este método es ideal para limpiar el espacio de trabajo, así como para empaquetar una secuencia de nodos con el fin de reutilizarlos en otros entornos.

Ejercicio: nodos personalizados para la asignación de UV

Parte I: comenzar con un grƔfico

En la imagen siguiente, se asigna un punto de una superficie a otra mediante coordenadas UV. Utilizaremos este concepto para crear una superficie panelizada que haga referencia a curvas en el plano XY. Crearemos paneles de cuadrados para esta panelización pero, con esta misma lógica, podemos crear una amplia variedad de paneles con asignación de UV. Esta es una gran oportunidad para el desarrollo de nodos personalizados, ya que vamos a poder repetir un proceso similar mÔs fÔcilmente en este grÔfico o en otros flujos de trabajo de Dynamo.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

5KB
UV-CustomNode.zip
archive
Open

Comenzaremos con la creación de un grÔfico que deseamos anidar en un nodo personalizado. En este ejemplo, crearemos un grÔfico que asigna polígonos de una superficie base a una superficie de destino mediante coordenadas UV. Este proceso de asignación de UV es algo que se utiliza con frecuencia, lo que lo convierte en un buen candidato para un nodo personalizado. Para obtener mÔs información sobre superficies y el espacio UV, consulte la pÔgina Superficie. El grÔfico completo es _UVmapping\Custom-Node.dyn del archivo .zip descargado anteriormente.

  1. Code Block: utilice esta lĆ­nea para crear un intervalo de 10 nĆŗmeros entre -45 y 45 45..45..#10;.

  2. Point.ByCoordinates: conecte la salida del bloque de código a las entradas "x" e "y", y establezca el encaje como producto vectorial. Ahora debería ver una rejilla de puntos.

  3. Plane.ByOriginNormal: conecte la salida "Point" a la entrada "origin" para crear un plano en cada uno de los puntos. Se utilizarĆ” el vector normal por defecto (0,0,1).

  4. Rectangle.ByWidthLength: conecte los planos del paso anterior a la entrada "plane" y utilice un bloque de código con un valor de 10 para especificar la anchura y la longitud.

Ahora deberƭa ver una rejilla de rectƔngulos. Asignemos ahora estos rectƔngulos a una superficie de destino mediante coordenadas UV.

  1. Polygon.Points: conecte la salida Rectangle.ByWidthLength del paso anterior a la entrada "polygon" para extraer los puntos de esquina de cada rectƔngulo. Estos son los puntos que asignaremos a la superficie de destino.

  2. Rectangle.ByWidthLength: utilice un bloque de código con un valor de 100 para especificar la anchura y la longitud del rectÔngulo. Este serÔ el contorno de la superficie base.

  3. Surface.ByPatch: conecte la salida Rectangle.ByWidthLength del paso anterior a la entrada "closedCurve" para crear una superficie base.

  4. Surface.UVParameterAtPoint: conecte la salida "Point" del nodo Polygon.Points y la salida "Surface" del nodo Surface.ByPatch para devolver el parƔmetro UV de cada punto.

Ahora que tenemos una superficie base y un conjunto de coordenadas UV, podemos importar una superficie de destino y asignar los puntos entre las superficies.

  1. File Path: seleccione la ruta de archivo de la superficie que desea importar. El tipo de archivo debe ser .SAT. Haga clic en el botón "Examinar" y desplÔcese hasta el archivo UVmapping_srf.sat del archivo .zip que hemos descargado anteriormente.

  2. Geometry.ImportFromSAT: conecte la ruta de archivo para importar la superficie. La superficie importada se muestra en la vista preliminar de la geometrĆ­a.

  3. UV: conecte la salida del parƔmetro UV a un nodo UV.U y un nodo UV.V.

  4. Surface.PointAtParameter: conecte la superficie importada, asĆ­ como las coordenadas u y v. Ahora deberĆ­a ver una rejilla de puntos 3D en la superficie de destino.

El Ćŗltimo paso consiste en utilizar los puntos 3D para crear parches de superficie rectangulares.

  1. PolyCurve.ByPoints: conecte los puntos de la superficie para construir una PolyCurve a travƩs de los puntos.

  2. Boolean: añada un nodo Boolean al espacio de trabajo y conéctelo a la entrada "connectLastToFirst" y, a continuación, cambie el valor a "True" (verdadero) para cerrar las PolyCurves. Ahora debería ver los rectÔngulos asignados a la superficie.

  3. Surface.ByPatch: conecte las PolyCurves a la entrada "closedCurve" para construir parches de superficie.

Parte II: del grƔfico al nodo personalizado

Ahora vamos a seleccionar los nodos que queremos anidar en un nodo personalizado teniendo en cuenta las entradas y salidas que este debe tener. Queremos que nuestro nodo personalizado sea lo mƔs flexible posible, de modo que deberƭa poder asignar cualquier polƭgono, no solo rectƔngulos.

Seleccione los siguientes nodos (comenzando por Polygon.Points), haga clic con el botón derecho en el espacio de trabajo y seleccione "Crear nodo personalizado".

En el cuadro de diÔlogo Propiedades de nodo personalizado, asigne un nombre, una descripción y una categoría al nodo personalizado.

  1. Nombre: MapPolygonsToSurface.

  2. Descripción: asigne polígonos de una base a una superficie de destino.

  3. CategorĆ­a de complementos: Geometry.Curve.

El nodo personalizado ha limpiado considerablemente el espacio de trabajo. Observe que las entradas y salidas se han nombrado en función de los nodos originales. Editaremos el nodo personalizado para que los nombres sean mÔs descriptivos.

Haga doble clic en el nodo personalizado para editarlo. Se abrirĆ” un espacio de trabajo con un fondo amarillo que representa el interior del nodo.

  1. Entradas: cambie los nombres de entrada a baseSurface y targetSurface.

  2. Salidas: aƱada una salida adicional para los polƭgonos asignados.

Guarde el nodo personalizado y vuelva al espacio de trabajo de inicio. Observe que el nodo MapPolygonsToSurface refleja los cambios que acabamos de realizar.

TambiƩn podemos reforzar la solidez del nodo personalizado aƱadiendo comentarios personalizados. Los comentarios pueden servir como ayuda en las entradas y salidas o explicar el funcionamiento del nodo. Los comentarios aparecerƔn cuando el usuario coloque el cursor sobre una entrada o una salida de un nodo personalizado.

Haga doble clic en el nodo personalizado para editarlo. De este modo, se volverĆ” a abrir el espacio de trabajo con fondo amarillo.

  1. Edite primero el bloque de código de entrada. Para iniciar un comentario, escriba "//" seguido del texto del comentario. Escriba cualquier información que pueda ayudar a entender mejor el nodo; aquí describiremos targetSurface.

  2. Vamos a definir tambiƩn el valor por defecto de inputSurface estableciendo el valor a que equivale un tipo de entrada. Aquƭ, vamos a definir el valor por defecto en el conjunto Surface.ByPatch original.

TambiƩn se pueden aplicar comentarios a las salidas.

Edite el texto en el bloque de código Output. Escriba "//" seguido del texto del comentario. Aquí vamos a aclarar las salidas Polygons y surfacePatches añadiendo una descripción mÔs detallada.

  1. Coloque el cursor sobre las entradas del nodo personalizado para ver los comentarios.

  2. Con el valor por defecto establecido en inputSurface, también podemos ejecutar la definición sin una entrada de superficie.

Funciones

Las funciones se pueden crear en un bloque de código y recuperar en cualquier parte de una definición de Dynamo. Esto crea otra capa de control en un archivo paramétrico y se puede ver como una versión de texto de un nodo personalizado. En este caso, se puede acceder fÔcilmente al bloque de código "principal", que se encuentra en cualquier parte del grÔfico. No se necesitan cables.

Elemento principal

En la primera línea, aparece la palabra clave "def", después el nombre de la función y, a continuación, los nombres de las entradas entre paréntesis. Las llaves definen el cuerpo de la función. Se devuelve un valor con "return =". Los bloques de código que definen una función no tienen puertos de entrada o salida porque se invocan desde otros bloques de código.

/*This is a multi-line comment,
which continues for
multiple lines*/
def FunctionName(in1,in2)
{
//This is a comment
sum = in1+in2;
return sum;
};

Elementos secundarios

Invoque la función con otro bloque de código en el mismo archivo asignando el nombre y la misma cantidad de argumentos. Funciona igual que los nodos predefinidos de la biblioteca.

FunctionName(in1,in2);

Ejercicio: esfera por Z

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

30KB
Functions_SphereByZ.dyn
Open

En este ejercicio, crearemos una definición genérica que crearÔ esferas a partir de una lista de entrada de puntos. El radio de estas esferas depende de la propiedad Z de cada punto.

Comencemos con un intervalo de diez valores que abarca de 0 a 100. Conecte estos nodos a un nodo Point.ByCoordinates para crear una lĆ­nea diagonal.

Cree un bloque de código e introduzca nuestra definición.

  1. Utilice estas líneas de código:

    def sphereByZ(inputPt)
    {
    
    };

El parÔmetro inputPt es el nombre que se le ha asignado para representar los puntos que controlarÔn la función. En este momento, la función no realiza ninguna acción, pero la ampliaremos en los pasos siguientes.

  1. Al añadir la función de bloque de código, se coloca un comentario y una variable sphereRadius que consulta la posición Z de cada punto. Recuerde que inputPt.Z no necesita paréntesis como método. Se trata de una consulta de las propiedades de un elemento existente, por lo que no se necesita ninguna entrada:

def sphereByZ(inputPt,radiusRatio)
{
//get Z Value, ise ot to drive radius of sphere
sphereRadius=inputPt.Z;
};
  1. Ahora, vamos a recuperar la función que hemos creado en otro bloque de código. Si hacemos doble clic en el lienzo para crear un nuevo bloque de código y escribimos sphereB, observaremos que Dynamo sugiere la función sphereByZ que hemos definido. La función se ha añadido a la biblioteca de IntelliSense. ”Genial!

  1. Ahora llamamos a la función y creamos una variable denominada Pt para conectar los puntos creados en los pasos anteriores:

    sphereByZ(Pt)
  2. En la salida, podemos observar que todos los valores son nulos. ¿Por qué ocurre eso? Al definir la función, calculamos la variable sphereRadius, pero no hemos definido qué debe devolver la función como una salida. Podemos solucionar esto en el siguiente paso.

  1. Un paso importante es definir la salida de la función mediante la adición de la línea return = sphereRadius; a la función sphereByZ.

  2. Ahora vemos que la salida del bloque de código nos proporciona las coordenadas Z de cada punto.

Ahora vamos a crear esferas reales mediante la edición de la función principal.

  1. Definamos primero una esfera con la siguiente línea de código: sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);.

  2. A continuación, cambiamos el valor de retorno para que sea sphere en lugar de sphereRadius: return = sphere;. Esto nos proporciona unas esferas gigantes en la vista preliminar de Dynamo.

1. Para reducir el tamaño de estas esferas, actualicemos el valor de sphereRadius mediante la adición de un divisor: sphereRadius = inputPt.Z/20;. Ahora podemos ver las esferas separadas y empezar a entender la relación entre el radio y el valor Z.

  1. En el nodo Point.ByCoordinates, al cambiar el encaje de MÔs corto a Producto vectorial, creamos una rejilla de puntos. La función sphereByZ sigue estando totalmente activa, por lo que todos los puntos crean esferas con radios basados en valores Z.

  1. Y, solo para tantear el terreno, conectamos la lista original de nĆŗmeros a la entrada X de Point.ByCoordinates. Ahora tenemos un cubo de esferas.

  2. Nota: Si el cƔlculo tarda mucho en completarse en el equipo, pruebe a cambiar el valor #10 por un valor como #5.

Recuerde que la función sphereByZ que hemos creado es una función genérica, por lo que podemos recuperar la hélice de una lección anterior y aplicarle la función.

Como paso final, vamos a controlar la relación de radio con un parÔmetro definido por el usuario. Para ello, debemos crear una entrada nueva para la función y reemplazar el divisor 20 por un parÔmetro.

  1. Actualice la definición de sphereByZ a:

    def sphereByZ(inputPt,radiusRatio)
    {
    //get Z Value, use it to drive radius of sphere
    sphereRadius=inputPt.Z/radiusRatio;
    //Define Sphere Geometry
    sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
    //Define output for function
    return sphere;
    };
  2. Actualice el bloque de código secundario mediante la adición de una variable "ratio" a la entrada: sphereByZ(Pt,ratio);. Conecte un control deslizante a la entrada de bloque de código recién creada y varíe el tamaño de los radios en función de la relación de radio.

GitHub - mzjensen/Camber: An open-source Dynamo package for Civil 3D.GitHub
Civil 3D and Dynamo—Dynamic Culvert Design and Analysis | Autodesk Universitywww.autodesk.com
Getting Started with Dynamo for Civil 3D: A Beginner’s Guide | Autodesk Universitywww.autodesk.com
Logo
Logo
Logo
Logo
Logo
Logo
Logo

Personalización

Aunque ya hemos visto cómo editar una masa de construcción bÔsica, queremos profundizar en el vínculo entre Dynamo y Revit mediante la edición de un gran número de elementos de una sola vez. La personalización a gran escala se vuelve mÔs compleja ya que las estructuras de datos requieren operaciones de lista mÔs avanzadas. Sin embargo, los principios subyacentes de su ejecución son esencialmente los mismos. Vamos a estudiar algunas oportunidades de anÔlisis a partir de un conjunto de componentes adaptativos.

Ubicación de puntos

Supongamos que hemos creado un rango de componentes adaptativos y queremos editar parÔmetros en función de sus ubicaciones de puntos. Los puntos podrían, por ejemplo, controlar un parÔmetro de grosor relacionado con el Ôrea del elemento. O bien, podrían controlar un parÔmetro de opacidad relacionado con la exposición solar a lo largo del año. Dynamo permite la conexión de anÔlisis a parÔmetros en unos sencillos pasos; exploraremos una versión bÔsica en el ejercicio siguiente.

Consulte los puntos adaptativos de un componente adaptativo seleccionado mediante el nodo AdaptiveComponent.Locations. Esto nos permite trabajar con una versión resumida de un elemento de Revit para el anÔlisis.

Al extraer la ubicación de los puntos de los componentes adaptativos, se pueden ejecutar distintos anÔlisis para ese elemento. Un componente adaptativo de cuatro puntos le permitirÔ estudiar la desviación desde el plano en un panel determinado, por ejemplo.

AnÔlisis de orientación solar

Utilice la reasignación para asignar un conjunto de datos a un rango de parÔmetros. Esta es una herramienta fundamental que se utiliza en un modelo paramétrico. Haremos una demostración en el siguiente ejercicio.

Dynamo permite usar las ubicaciones de los puntos de los componentes adaptativos para crear un plano de ajuste óptimo para cada elemento. También podemos consultar la posición del sol en el archivo de Revit y estudiar la orientación relativa del plano con respecto al sol en comparación con otros componentes adaptativos. Configuremos esta acción en el siguiente ejercicio mediante la creación de una cubierta algorítmica.

Ejercicio:

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

En este ejercicio se amplían las técnicas mostradas en la sección anterior. En este caso, vamos a definir una superficie paramétrica a partir de elementos de Revit; para ello, crearemos ejemplares de los componentes adaptativos de cuatro puntos y, a continuación, los editaremos según la orientación del sol.

  1. Comience por seleccionar dos bordes con el nodo "Select Edge". Los dos bordes son los tramos largos del atrio.

  2. Combine los dos bordes en una lista con el nodo List.Create.

  3. Cree una superficie entre los dos bordes con un nodo Surface.ByLoft.

  1. Mediante el bloque de código, defina un rango de 0 a 1 con 10 valores espaciados uniformemente: 0..1..#10;.

  2. Conecte el bloque de código a las entradas u y v de un nodo Surface.PointAtParameter y conecte el nodo Surface.ByLoft a la entrada surface. Haga clic con el botón derecho en el nodo y cambie el encaje a Producto vectorial. Esto proporcionarÔ una rejilla de puntos en la superficie.

Esta rejilla de puntos sirve como puntos de control para una superficie definida paramétricamente. Queremos extraer las posiciones u y v de cada uno de estos puntos para poder conectarlos a una fórmula paramétrica y mantener la misma estructura de datos. Para ello, podemos consultar las ubicaciones de parÔmetros de los puntos que acabamos de crear.

  1. AƱada un nodo Surface.ParameterAtPoint al lienzo y conecte las entradas como se muestra mƔs arriba.

  2. Consulte los valores u de estos parƔmetros con el nodo UV.U.

  3. Consulte los valores v de estos parƔmetros con el nodo UV.V.

  4. Las salidas muestran los valores u y v correspondientes a cada punto de la superficie. Ahora tenemos un rango de 0 a 1 para cada valor en la estructura de datos adecuada, por lo que estamos listos para aplicar un algoritmo paramƩtrico.

  1. Añada un bloque de código al lienzo e introduzca el siguiente código: Math.Sin(u*180)*Math.Sin(v*180)*w;. Esta es una función paramétrica que crea un relieve de seno a partir de una superficie plana.

  2. Conecta UV.U a la entrada u y UV.V a la entrada v.

  3. La entrada w representa la amplitud de la forma, por lo que le conectamos un control deslizante de nĆŗmero.

  1. Ahora tenemos una lista de valores tal y como los define el algoritmo. Usaremos esta lista de valores para mover los puntos hacia arriba en la dirección +Z. Con Geometry.Translate, conecte el bloque de código a zTranslation y el nodo Surface.PointAtParameter a la entrada geometry. Deben aparecer los nuevos puntos en la vista preliminar de Dynamo.

  2. Por último, creamos una superficie con el nodo NurbsSurface.ByPoints y conectamos el nodo del paso anterior a la entrada points. Ya tenemos una superficie paramétrica. Puede arrastrar el control deslizante para reducir o aumentar el relieve.

Con la superficie paramétrica, vamos a definir un método para dividirla en paneles y crear la matriz de componentes adaptativos de cuatro puntos. Dynamo no dispone de funciones predefinidas para la división en paneles de las superficies, por lo que podemos buscar en la comunidad paquetes de Dynamo útiles.

  1. Vaya a Paquetes > Buscar un paquete.

  2. Busque "LunchBox" e instale "LunchBox for Dynamo". Se trata de un conjunto de herramientas muy Ćŗtil para operaciones de geometrĆ­a como esta.

  1. Tras la descarga, tendrƔ acceso completo a la suite de LunchBox. Busque "Quad Grid" y seleccione "LunchBox Quad Grid By Face". Conecte la superficie paramƩtrica a la entrada surface y establezca las divisiones U y V en 15. Debe aparecer una superficie con cuatro paneles en la vista preliminar de Dynamo.

Si tiene curiosidad sobre su configuración, puede hacer doble clic en el nodo Lunch Box y ver cómo se ha realizado.

Volvamos a Revit para comprobar rÔpidamente el componente adaptativo que estamos utilizando aquí. No hace falta seguirlo, pero este es el panel de cubierta del que vamos a crear un ejemplar. Se trata de un componente adaptativo de cuatro puntos que es una representación en bruto de un sistema ETFE. La apertura del vacío central se encuentra en un parÔmetro denominado "ApertureRatio".

  1. Vamos a crear una gran cantidad de ejemplares de geometrĆ­a en Revit, por lo que debe asegurarse de que el solucionador de Dynamo se encuentre en el modo "Manual".

  2. AƱada un nodo Family Types al lienzo y seleccione "ROOF-PANEL-4PT".

  3. AƱada un nodo AdaptiveComponent.ByPoints al lienzo, conecte Panel Pts de la salida de "LunchBox Quad Grid by Face" a la entrada points. Conecte el nodo Family Types a la entrada familySymbol.

  4. Pulse Ejecutar. Revit tendrÔ que pensar un poco mientras se crea la geometría. Si tarda demasiado, reduzca el valor de 15 del bloque de código a un número inferior. De este modo, se reduce el número de paneles de la cubierta.

Nota: Si Dynamo tarda mucho tiempo en calcular los nodos, puede usar la función "Bloquear" para poner en pausa la ejecución de operaciones de Revit mientras desarrolla el grÔfico. Para obtener mÔs información sobre el bloqueo de nodos, consulte la sección "Bloqueo" del capítulo sobre sólidos.

Al volver a Revit, disponemos de la matriz de paneles en la cubierta.

Al ampliar, podemos observar mejor las cualidades de la superficie.

AnƔlisis

  1. Continuando con el ejemplo anterior, vamos a ir un paso mÔs allÔ y vamos a definir la apertura de cada panel en función de su exposición al sol. Al ampliar en Revit y seleccionar un panel, vemos que hay un parÔmetro denominado "Coeficiente de apertura" en la barra de propiedades. La familia se configura para que los rangos de apertura estén comprendidos aproximadamente entre 0,05 y 0,45.

  1. Si se activa el camino solar, se puede ver la ubicación actual del sol en Revit.

  1. Podemos hacer referencia a esta ubicación del sol mediante el nodo SunSettings.Current.

  1. Conecte la configuración del sol a Sunsetting.SunDirection para obtener el vector solar.

  2. En el elemento Panel Pts utilizado para crear los componentes adaptativos, utilice Plane.ByBestFitThroughPoints para aproximar un plano para el componente.

  3. Consulte la normal de este plano.

  4. Use el producto escalar para calcular la orientación solar. El producto escalar es una fórmula que determina el grado de paralelismo o antiparalelismo de dos vectores. Por tanto, tomamos la normal del plano de cada componente adaptativo y lo comparamos con el vector solar para simular aproximadamente la orientación solar.

  5. Tome el valor absoluto del resultado. De esta forma, se garantiza que el producto escalar sea preciso si la normal del plano estÔ orientada hacia la dirección inversa.

  6. Pulse Ejecutar.

  1. En el producto escalar, tenemos una amplia gama de números. Queremos usar su distribución relativa, pero debemos condensar los números en el rango apropiado del parÔmetro "Coeficiente de apertura" que tenemos previsto editar.

  1. Math.RemapRange es una herramienta ideal para ello. Toma una lista de entrada y reasigna sus lĆ­mites a dos valores objetivo.

  2. Defina los valores objetivo en 0,15 y 0,45 en un bloque de código.

  3. Pulse Ejecutar.

  1. Conecte los valores reasignados a un nodo Element.SetParameterByName.

  1. Conecte la cadena "Coeficiente de apertura" a la entrada parameterName.

  2. Conecte los componentes adaptativos a la entrada element.

  3. Pulse Ejecutar.

De vuelta en Revit, visualizamos a una distancia que nos permita determinar el efecto de la orientación solar en la apertura de los paneles ETFE.

Al ampliar, vemos que los paneles ETFE estÔn mÔs cerrados cuando miran hacia el sol. Nuestro objetivo es reducir el sobrecalentamiento por la exposición solar. Si quisiéramos dejar pasar mÔs luz en función de la exposición solar, solo tendríamos que cambiar el dominio en Math.RemapRange.

Trabajo con listas

Trabajo con listas

Ahora que hemos establecido lo que es una lista, hablemos de las operaciones que podemos realizar en ella. Imagine una lista como un mazo de cartas. El mazo es la lista y cada carta representa un elemento.

FotografĆ­a de

Consulta

¿Qué consultas se pueden realizar a partir de la lista? Esto permite acceder a las propiedades existentes.

  • ĀæNĆŗmero de cartas del mazo? 52.

  • ĀæNĆŗmero de palos? 4.

  • ĀæMaterial? Papel.

  • ĀæLongitud? 3,5" u 89 mm.

  • ĀæAnchura? 2,5" o 64 mm.

Acción

¿Qué acciones se pueden realizar en la lista? Estas acciones cambian la lista en función de una operación especificada.

  • Podemos barajar el mazo de cartas.

  • Podemos ordenar el mazo por valor.

  • Podemos ordenar el mazo por palo.

  • Podemos dividir el mazo.

  • Podemos dividir el mazo repartiendo manos individuales.

  • Podemos seleccionar una carta especĆ­fica del mazo.

Todas las operaciones mencionadas anteriormente tienen nodos anƔlogos de Dynamo para trabajar con listas de datos genƩricos. En las lecciones siguientes, se muestran algunas de las operaciones fundamentales que podemos realizar en las listas.

Ejercicio

Operaciones de lista

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

La imagen siguiente es el grÔfico base en el que se dibujan líneas entre dos círculos para representar operaciones de lista bÔsicas. Exploraremos cómo administrar los datos de una lista y mostraremos los resultados visuales a través de las acciones de lista que aparecen a continuación.

  1. Comience con un bloque de código con un valor de 500;.

  2. ConƩctelo a la entrada x de un nodo Point.ByCoordinates.

  3. Conecte el nodo del paso anterior a la entrada origin de un nodo Plane.ByOriginNormal.

  4. Con un nodo Circle.ByPlaneRadius, conecte el nodo del paso anterior en la entrada plane.

  5. Mediante el bloque de código, designe un valor de 50; para el radio. Este es el primer círculo que crearemos.

  6. Con un nodo Geometry.Translate, desplace el círculo hacia arriba 100 unidades en la dirección Z.

  7. Con un nodo Code Block, defina un rango de diez números entre 0 y 1 con esta línea de código: 0..1..#10;.

  8. Conecte el bloque de código del paso anterior a la entrada param de dos nodos Curve.PointAtParameter. Conecte Circle.ByPlaneRadius a la entrada "curve" del nodo superior y Geometry.Translate a la entrada curve del nodo situado debajo del mismo.

  9. Con un nodo Line.ByStartPointEndPoint, conecte los dos nodos Curve.PointAtParameter.

List.Count

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

El nodo List.Count es sencillo: cuenta el número de valores de una lista y devuelve ese número. Este nodo presenta mÔs detalles cuando se trabaja con listas de listas, pero eso lo veremos en las secciones siguientes.

  1. El nodo List.Count devuelve el nĆŗmero de lĆ­neas del nodo Line.ByStartPointEndPoint. En este caso, el valor es 10, lo que coincide con el nĆŗmero de puntos creados a partir del nodo Code Block original.

List.GetItemAtIndex

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

List.GetItemAtIndex es una forma fundamental de consultar un elemento de la lista.

  1. En primer lugar, haga clic con el botón derecho en el nodo Line.ByStartPointEndPoint para desactivar su vista preliminar.

  2. Con el nodo List.GetItemAtIndex, seleccionamos el Ć­ndice "0" o el primer elemento de la lista de lĆ­neas.

Cambie el valor del control deslizante entre 0 y 9 para seleccionar un elemento diferente mediante List.GetItemAtIndex.

List.Reverse

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

List.Reverse invierte el orden de todos los elementos de una lista.

  1. Para visualizar correctamente la lista de lƭneas invertida, cree mƔs lƭneas. Para ello, cambie el nodo Code Block a 0..1..#50;.

  2. Duplique el nodo Line.ByStartPointEndPoint, inserte un nodo List.Reverse entre Curve.PointAtParameter y el segundo nodo Line.ByStartPointEndPoint.

  3. Utilice los nodos Watch3D para obtener una vista preliminar de dos resultados diferentes. El primero muestra el resultado sin una lista invertida. Las lĆ­neas se conectan verticalmente con los puntos adyacentes. Sin embargo, la lista invertida conectarĆ” todos los puntos con la otra lista en el orden opuesto.

List.ShiftIndices

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

List.ShiftIndices es una buena herramienta para crear torsiones o patrones helicoidales, así como cualquier otra manipulación de datos similar. Este nodo desplaza los elementos de una lista un determinado número de índices.

  1. En el mismo proceso que la lista inversa, inserte un nodo List.ShiftIndices en Curve.PointAtParameter y Line.ByStartPointEndPointPoint.

  2. Mediante un bloque de código, designe un valor de "1" para desplazar la lista un índice.

  3. Observe que el cambio es sutil, pero todas las lĆ­neas del nodo Watch3D inferior se han desplazado un Ć­ndice al conectarlas al otro conjunto de puntos.

Al cambiar el bloque de código a un valor superior, por ejemplo "30", observamos una diferencia significativa en las líneas diagonales. El desplazamiento funciona como el iris de una cÔmara en este caso, creando una torsión en la forma cilíndrica original.

List.FilterByBooleanMask

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

List.FilterByBooleanMask eliminarÔ determinados elementos en función de una lista de operaciones booleanos o valores de "verdadero" o "falso".

Para crear una lista de valores de "verdadero" o "falso", necesitamos realizar un poco mƔs de trabajo...

  1. Mediante un bloque de código, defina una expresión con la sintaxis: 0..List.Count(list);. Conecte el nodo Curve.PointAtParameter a la entrada list. Veremos mÔs detalles sobre esta configuración en el capítulo del bloque de código, pero la línea de código en este caso nos proporciona una lista que representa cada índice del nodo Curve.PointAtParameter.

  2. Mediante un nodo %** (módulo)**, conecte la salida del bloque de código en la entrada x y un valor de 4 en la salida y. Esto nos darÔ el resto al dividir la lista de índices entre 4. El módulo es un nodo muy útil para la creación de patrones. Todos los valores serÔn los restos posibles de 4: 0, 1, 2, 3.

  3. En el nodo %** (módulo)**, sabemos que el valor 0 significa que el índice es divisible por 4 (0, 4, 8, etc.). Mediante un nodo ==, podemos probar la divisibilidad frente a un valor de "0".

  4. El nodo Watch muestra solo esto; disponemos de un patrón verdadero/falso que dice: verdadero,falso,falso,falso,falso....

  5. Mediante este patrón verdadero/falso, conéctelo a la entrada "mask" de dos nodos List.FilterByBooleanMask.

  6. Conecte el nodo Curve.PointAtParameter en cada una de las entradas "list" de los nodos List.FilterByBooleanMask.

  7. Las salidas de Filter.ByBooleanMask son "in" y "out". "In" representa los valores que tenƭan un valor de mƔscara de "Verdadero (True)" mientras que "out" representa los valores que tenƭan un valor de "Falso (False)". Al conectar las salidas "in" a las entradas startPoint y endPoint de un nodo Line.ByStartPointEndPoint, hemos creado una lista filtrada de lƭneas.

  8. El nodo Watch3D indica que hay menos lĆ­neas que puntos. Hemos seleccionado solo el 25 % de los nodos filtrando solo los valores verdaderos.

5MB
Revit-Customizing.zip
archive
Open
Christian Gidlƶf
7KB
List-Operations.dyn
Open
8KB
List-Count.dyn
Open
8KB
List-GetItemAtIndex.dyn
Open
8KB
List-Reverse.dyn
Open
8KB
List-ShiftIndices.dyn
Open
11KB
List-FilterByBooleanMask.dyn
Open
cartas
Conteo
Ejercicio
Ejercicio
Ejercicio
Ejercicio
Logo
Logo
Logo
Logo
Logo

Selección

Seleccionar elementos de Revit

Revit es un entorno con gran cantidad de datos. Esto nos proporciona una gama de posibilidades de selección que se expande mucho mÔs allÔ de "señalar y hacer clic". Podemos consultar la base de datos de Revit y vincular dinÔmicamente elementos de Revit a la geometría de Dynamo mientras realizamos operaciones paramétricas.

La biblioteca de Revit de la interfaz de usuario ofrece la categoría "Selection" (selección) que permite elegir varias formas de seleccionar la geometría.

JerarquĆ­a de Revit

Para seleccionar elementos de Revit correctamente, es importante comprender totalmente la jerarquĆ­a de elementos de Revit. ĀæDesea seleccionar todos los muros de un proyecto? Seleccione por categorĆ­a. ĀæDesea seleccionar todas las sillas Eames en su lobby moderno de mediados de siglo? Seleccione por familia.

Vamos a revisar rƔpidamente la jerarquƭa de Revit.

¿Recuerda la taxonomía de la biología? Reino, phylum, clase, orden, familia, género y especie. Los elementos de Revit se clasifican de forma similar. En un nivel bÔsico, la jerarquía de Revit se puede dividir en categorías, familias, tipos* y ejemplares. Un ejemplar es un elemento de modelo individual (con un ID exclusivo), mientras que una categoría define un grupo genérico (como "muros" o "suelos"). Con la base de datos de Revit organizada de este modo, podemos seleccionar un elemento y elegir todos los elementos similares en función de un nivel especificado en la jerarquía.

* Los tipos en Revit se definen de forma distinta a los tipos en programación. En Revit, un tipo hace referencia a una ramificación de la jerarquía, en lugar de a un "tipo de datos".

Navegación por las bases de datos con nodos de Dynamo

Las tres imÔgenes siguientes dividen las categorías principales para la selección de elementos de Revit en Dynamo. Son herramientas excelentes para usarlas en combinación y exploraremos algunas de ellas en los ejercicios siguientes.

Señalar y hacer clic es el método mÔs sencillo para seleccionar directamente un elemento de Revit. Puede seleccionar un elemento de modelo completo o partes de su topología (como una cara o un borde). Este elemento permanece vinculado dinÔmicamente a ese objeto de Revit, por lo que, cuando el archivo de Revit actualiza su ubicación o parÔmetros, el elemento de Dynamo al que se hace referencia se actualiza en el grÔfico.

Los menús desplegables crean una lista de todos los elementos a los que se puede acceder en un proyecto de Revit. Puede utilizar esta opción para hacer referencia a elementos de Revit que no estÔn necesariamente visibles en una vista. Esta es una herramienta excelente para consultar elementos existentes o crear nuevos elementos en un editor de proyectos o familias de Revit.

![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)

También puede seleccionar elementos de Revit por niveles específicos en la jerarquía de Revit. Esta es una opción eficaz para personalizar grandes matrices de datos para preparar la documentación o la creación de ejemplares y personalización generativas.

IU

Teniendo en cuenta las tres imƔgenes anteriores, vamos a profundizar en un ejercicio que selecciona elementos de un proyecto bƔsico de Revit para preparar las aplicaciones paramƩtricas que crearemos en las secciones restantes de este capƭtulo.

Ejercicio

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

5MB
Revit-Selecting.zip
archive
Open

En este archivo de Revit de ejemplo, tenemos tres tipos de elementos de un edificio sencillo. Vamos a usar este archivo como ejemplo para seleccionar elementos de Revit en el contexto de la jerarquĆ­a de Revit.

  1. Masa de construcción

  2. Vigas (armazón estructural)

  3. Vigas de celosĆ­a (componentes adaptativos)

¿Qué conclusiones podemos sacar de los elementos que hay en la vista de proyecto de Revit? Y, ¿cuÔnto debemos descender en la jerarquía para seleccionar los elementos adecuados? Por supuesto, esta tarea se volverÔ mÔs compleja al trabajar en un proyecto de gran tamaño. Hay una gran cantidad de opciones disponibles; se pueden seleccionar elementos por categorías, niveles, familias, ejemplares, etc.

Selección de masa y superficies

  1. Como estamos trabajando con una configuración bÔsica, seleccionaremos la masa de construcción eligiendo "Mass" en el nodo desplegable Categories. Puede encontrarlo en la ficha Revit > Selection.

  2. La salida de la categorĆ­a Mass es solo la categorĆ­a en sĆ­. Debemos seleccionar los elementos. Para ello, se utiliza el nodo "All Elements of Category".

En este punto, observe que no se ve ninguna geometría en Dynamo. Hemos seleccionado un elemento de Revit, pero no lo hemos convertido en geometría de Dynamo. Se trata de una distinción importante. Si tuviéramos que seleccionar un gran número de elementos, no es deseable obtener una vista preliminar de todos ellos en Dynamo porque esto ralentizaría todo el proceso. Dynamo es una herramienta para gestionar un proyecto de Revit sin realizar necesariamente operaciones de geometría, y lo veremos en la siguiente sección de este capítulo.

En este caso trabajamos con geometrĆ­a sencilla, por lo que vamos a incorporar la geometrĆ­a a la vista preliminar de Dynamo. Junto al elemento "BldgMass" del nodo Watch anterior aparece un nĆŗmero verde. Esto representa el ID del elemento e indica que estamos trabajando con un elemento de Revit, no con una geometrĆ­a de Dynamo. El siguiente paso es convertir este elemento de Revit en geometrĆ­a en Dynamo.

  1. Mediante el nodo Element.Faces, se obtiene una lista de las superficies que representan cada cara de la masa de Revit. Ahora podemos ver la geometrƭa en la ventana grƔfica de Dynamo y comenzar a hacer referencia a la cara para realizar operaciones paramƩtricas.

A continuación se incluye un método alternativo. En este caso, no vamos a realizar la selección mediante la jerarquía de Revit ("All Elements of Category"), sino que vamos a seleccionar de forma explícita la geometría en Revit.

  1. Mediante el nodo "Select Model Element", haga clic en el botón *"select"* (o "change"). En la ventana grÔfica de Revit, seleccione el elemento que desee. En este caso, seleccionamos la masa de construcción.

  2. En lugar de Element.Faces, se puede seleccionar la masa completa como una geometría sólida mediante Element.Geometry. De este modo, se selecciona toda la geometría contenida en la masa.

  3. Mediante Geometry.Explode, podemos obtener la lista de superficies de nuevo. Estos dos nodos funcionan de la misma forma que Element.Faces, pero ofrecen opciones alternativas para profundizar en la geometrĆ­a de un elemento de Revit.

Mediante algunas operaciones de lista bƔsicas, podemos consultar una cara de interƩs.

  1. En primer lugar, genere los elementos seleccionados anteriormente en el nodo Element.Faces.

  2. A continuación, el nodo List.Count indica que estamos trabajando con 23 superficies en la masa.

  3. Al hacer referencia a este número, se cambia el valor mÔximo de un *control deslizante de enteros* a "22".

  4. Con List.GetItemAtIndex, se introducen las listas y el *control deslizante de enteros* para el índice. Deslizamos la selección y nos detenemos cuando lleguemos al índice 9 y hayamos aislado la fachada principal que contiene las vigas de celosía.

El paso anterior era un poco engorroso. Esto se puede hacer mucho mÔs deprisa con el nodo "Select Face". Este nos permite aislar una cara que no es un elemento en el proyecto de Revit. Se aplica la misma interacción que con "Select Model Element", excepto que seleccionamos la superficie en lugar del elemento completo.

Supongamos que deseamos aislar los muros de las fachadas principales del edificio. Para ello, se puede utilizar el nodo "Select Faces". Haga clic en el botón "Select" y, a continuación, seleccione las cuatro fachadas principales en Revit.

Después de seleccionar los cuatro muros, asegúrese de hacer clic en el botón "Finalizar" en Revit.

Las caras se importan en Dynamo como superficies.

Selección de vigas

Ahora, veamos las vigas situadas sobre el atrio.

  1. Con el nodo "Select Model Element", seleccione una de las vigas.

  2. Conecte el elemento de viga al nodo Element.Geometry; la viga aparecerƔ en la ventana grƔfica de Dynamo.

  3. Podemos ampliar la geometría con un nodo Watch3D (si no ve la viga en Watch 3D, haga clic con el botón derecho y pulse "Ajustar en ventana").

Una duda que puede aparecer con frecuencia en los flujos de trabajo de Revit o Dynamo es la siguiente: ¿cómo selecciono un elemento y obtengo todos los elementos similares? Como el elemento de Revit seleccionado contiene toda su información jerÔrquica, podemos consultar su tipo de familia y seleccionar todos los elementos de ese tipo.

  1. Conecte el elemento de viga a un nodo Element.ElementType.

  2. El nodo Watch indica que la salida es ahora un sĆ­mbolo de familia en lugar de un elemento de Revit.

  3. Element.ElementType es una consulta sencilla, por lo que podemos realizarla en el bloque de código de la misma forma con x.ElementType; y obtener los mismos resultados.

  1. Para seleccionar las vigas restantes, utilizaremos el nodo "All Elements of Family Type".

  2. El nodo Watch muestra que se han seleccionado cinco elementos de Revit.

  1. TambiƩn podemos convertir estos cinco elementos en geometrƭa de Dynamo.

¿Y si tuviéramos 500 vigas? Convertir todos estos elementos en geometría de Dynamo sería muy lento. Si Dynamo tarda mucho tiempo en calcular los nodos, puede usar la función "Bloquear" para poner en pausa la ejecución de operaciones de Revit mientras desarrolla el grÔfico. Para obtener mÔs información sobre el bloqueo de nodos, consulte la sección "Bloqueo" del capítulo sobre sólidos.

En cualquier caso, si importamos 500 vigas, ¿necesitamos que todas las superficies realicen la operación paramétrica deseada? ¿O podemos extraer información bÔsica de las vigas y realizar tareas generativas con geometría fundamental? Esta es una pregunta que tendremos en cuenta a medida que avanzamos en este capítulo. Por ejemplo, veamos a continuación el sistema de vigas de celosía:

Selección de vigas de celosía

Con el mismo grƔfico de nodos, seleccione el elemento de viga de celosƭa en lugar del elemento de viga. Antes de hacerlo, suprima el nodo Element.Geometry del paso anterior.

A continuación, ya estamos listos para extraer información bÔsica del tipo de familia de vigas de celosía.

  1. En el nodo Watch, podemos ver que tenemos una lista de componentes adaptativos seleccionados en Revit. Vamos a extraer la información bÔsica, por lo que comenzaremos con los puntos adaptativos.

  2. Conecte el nodo "All Elements of Family Type" al nodo "AdaptiveComponent.Location". Esto nos proporciona una lista de listas, cada una con tres puntos que representan las ubicaciones de los puntos adaptativos.

  3. Al conectar un nodo "Polygon.ByPoints", se obtiene una PolyCurve. Se puede ver en la ventana grÔfica de Dynamo. Con este método, hemos visualizado la geometría de un elemento y hemos abstraído la geometría de la matriz de elementos restantes (que podría ser mayor en número que este ejemplo).

Consejo: Si hace clic en el número verde de un elemento de Revit en Dynamo, la ventana grÔfica de Revit ampliarÔ ese elemento.

Abreviatura

Abreviatura

Existen varios métodos bÔsicos de abreviatura en el bloque de código que, sencillamente, facilitan mucho la administración de datos. A continuación, vamos a desglosar los conceptos bÔsicos y analizar cómo se puede utilizar la abreviatura para crear y consultar datos.

Sintaxis adicional

Rangos y secuencias

El método para definir rangos y secuencias se puede reducir a un método bÔsico de abreviatura. Utilice la imagen siguiente como guía de la sintaxis "..." para definir una lista de datos numéricos con un bloque de código. Una vez que aprendemos a utilizar esta notación, crear datos numéricos es un proceso realmente eficaz:

  1. En este ejemplo, un rango de números se sustituye por una sintaxis de bloque de código que define beginning..end..step-size;. Representados numéricamente, obtenemos lo siguiente: 0..10..1;.

  2. Observe que la sintaxis 0..10..1; es equivalente a 0..10;. Un tamaño de paso de 1 es el valor por defecto de la notación de abreviatura. Por lo tanto, 0..10; proporciona una secuencia de 0 a 10 con un tamaño de paso de 1.

  3. El ejemplo de secuencia es similar, excepto que se utiliza un sĆ­mbolo "#" para indicar que deseamos que haya 15 valores en la lista en lugar de una lista que llegue hasta 15. En este caso, se define lo siguiente: beginning..#ofSteps..step-size:. La sintaxis real de la secuencia es 0..#15..2.

  4. Ahora vamos a introducir el símbolo "#" del paso anterior en la sección "tamaño-de-paso" de la sintaxis. Ahora, tenemos un rango de números que abarca de "inicio" a "fin" y la notación de "tamaño de paso" distribuye uniformemente un número de valores entre los dos elementos: beginning..end..#ofSteps.

Rangos avanzados

La creación de rangos avanzados nos permite trabajar con listas de listas de una forma sencilla. En los ejemplos siguientes, se aísla una variable de la notación de rango principal y se crea otro rango de dicha lista.

1. Mediante la creación de rangos anidados, compare la notación con el símbolo "#" frente a la notación sin este símbolo. Se aplica la misma lógica que en los rangos bÔsicos, pero se vuelve un poco mÔs compleja.

2. Podemos definir un subrango en cualquier lugar dentro del rango principal; observe que tambiƩn podemos tener dos subrangos.

3. Al controlar el valor "fin" de un rango, se crean mƔs rangos de longitudes diferentes.

Como ejercicio lógico, compare las dos abreviaturas anteriores e intente analizar el modo en que los subrangos y la notación # controlan la salida.

Crear listas y obtener elementos de una lista

AdemÔs de crear listas con la función de abreviatura, también podemos crear listas sobre la marcha. Estas listas pueden contener una amplia gama de tipos de elementos y también se pueden consultar (recuerde que las listas son objetos en sí mismas). En resumen, con el bloque de código se crean listas y se consultan los elementos de una lista con corchetes.

1. Cree listas rƔpidamente con cadenas y consulte las listas mediante el ƭndice de elementos.

2. Cree listas con variables y realice consultas mediante la notación de abreviatura de rango.

AdemÔs, el proceso de gestión con listas anidadas es similar. Tenga en cuenta el orden de la lista y recuerde utilizar varios conjuntos de corchetes:

1. Defina una lista de listas.

2. Consulte una lista con notación de un solo corchete.

3. Consulte un elemento con notación de doble corchete.

Ejercicio: superficie sinusoidal

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

En este ejercicio, vamos a poner en prÔctica nuestras nuevas habilidades de abreviación para crear una superficie de cÔscaras de huevo con mucho estilo y definida por rangos y fórmulas. A lo largo de este ejercicio, observe cómo utilizamos el bloque de código y los nodos existentes en Dynamo en tÔndem: se utiliza el bloque de código para la elevación de datos pesados mientras que los nodos de Dynamo se disponen visualmente para determinar la legibilidad de la definición.

Comience por crear una superficie conectando los nodos anteriores. En lugar de utilizar un nodo numérico para definir la anchura y la longitud, haga doble clic en el lienzo y escriba 100; en un bloque de código.

  1. Defina un rango entre 0 y 1 con 50 divisiones. Para ello, escriba 0..1..#50 en un bloque de código.

  2. Conecte el rango en Surface.PointAtParameter, que toma los valores u y v entre 0 y 1 a lo largo de la superficie. No olvide cambiar el encaje a Producto vectorial. Para ello, haga clic con el botón derecho en el nodo Surface.PointAtParameter.

En este paso, utilizamos nuestra primera función para mover la rejilla de puntos hacia arriba en el eje Z. Esta rejilla controlarÔ una superficie generada a partir de la función subyacente. Añada nuevos nodos, como se muestra en la imagen siguiente.

  1. Utilizamos un bloque de código con la línea: (0..Math.Sin(x*360)..#50)*5;. Para descomponerlo rÔpidamente, vamos a definir un rango con una fórmula dentro de él. Esta fórmula es la función de seno. La función de seno recibe entradas de grado en Dynamo, por lo que, para obtener una onda sinusoidal completa, multiplicamos los valores x (es decir, la entrada de rango de 0 a 1) por 360. A continuación, queremos que haya el mismo número de divisiones que de puntos de rejilla de control para cada fila, por lo que definimos cincuenta subdivisiones con #50. Por último, el multiplicador de 5 simplemente aumenta la amplitud de la traslación para que podamos ver el efecto en la vista preliminar de Dynamo.

  1. Aunque el bloque de código anterior, no era totalmente paramétrico. Deseamos controlar sus parÔmetros de forma dinÔmica, por lo que reemplazaremos la línea del paso anterior por (0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;. Esto nos permite definir estos valores en función de las entradas.

Al cambiar los controles deslizantes (de 0 a 10), obtenemos resultados interesantes.

  1. Al realizar una transposición en el rango de números, se invierte la dirección de la onda cortina: transposeList = List.Transpose(sineList);.

  1. Se obtiene una superficie de cƔscara de huevo distorsionada al aƱadir los elementos sineList y transposeList: eggShellList = sineList+transposeList;.

Cambiemos los valores de los controles deslizantes especificados a continuación para "calmar las aguas" de este algoritmo.

Por último, vamos a consultar las partes aisladas de los datos con el bloque de código. Para regenerar la superficie con un rango específico de puntos, añada el bloque de código anterior entre los nodos Geometry.Translate y NurbsSurface.ByPoints. Tiene la siguiente línea de texto: sineStrips[0..15..1];. De este modo, se seleccionarÔn las primeras 16 filas de puntos (de 50). Al volver a crear la superficie, podemos ver que hemos generado una parte aislada de la rejilla de puntos.

  1. En el paso final, para que este bloque de código sea mÔs paramétrico, la consulta se controla mediante un control deslizante que va de 0 a 1. Para ello, utilizaremos esta línea de código: sineStrips[0..((List.Count(sineStrips)-1)*u)];. Esto puede resultar confuso, pero la línea de código nos proporciona una forma rÔpida de modificar la longitud de la lista con un multiplicador entre 0 y 1.

Un valor de 0.53 en el control deslizante crea una superficie justo despuƩs del punto medio de la rejilla.

Como se puede esperar, un control deslizante de 1 crea una superficie a partir de la rejilla completa de puntos.

En el grÔfico visual, podemos resaltar los bloques de código y ver cada una de sus funciones.

1. El primer bloque de código sustituye al nodo Number.

2. El segundo bloque de código sustituye al nodo Number Range.

3. El tercer bloque de código sustituye a los nodos List.Transpose, List.Count y Number Range.

4. El cuatro bloque de código consulta una lista de listas y sustituye al nodo List.GetItemAtIndex.

Sintaxis de DesignScript

Es posible que haya observado que en los nombres de los nodos de Dynamo se da un elemento común: cada nodo utiliza una sintaxis ".". Esto se debe a que el texto de la parte inicial de cada nodo representa la sintaxis real para las secuencias de comandos y "." (o notación de puntos) separa un elemento de los posibles métodos a los que es posible invocar. Esto permite traducir fÔcilmente las secuencias de comandos visuales a secuencias de comandos basadas en texto.

Como analogía general para la notación de puntos, ¿cómo podemos tratar una manzana paramétrica en Dynamo? A continuación se indican algunos métodos que ejecutaremos en la manzana antes de decidir consumirla. (Nota: estos no son métodos reales de Dynamo):

Legible por humanos
Notación de puntos
Salida

A juzgar por las salidas de la tabla de arriba, esta parece una manzana sabrosa. Creo que voy a Manzana.comer.

Notación de puntos en el bloque de código

Con la analogía de manzana en mente, fijémonos en Point.ByCoordinates y veamos cómo podemos crear un punto mediante el bloque de código.

La sintaxis del bloque de código Point.ByCoordinates(0,10); proporciona el mismo resultado que el nodo Point.ByCoordinates en Dynamo, excepto que permite crear un punto mediante un nodo. Esto es mÔs eficaz que conectar un nodo independiente a "X" e "Y".

  1. Al utilizar Point.ByCoordinates en el bloque de código, se especifican las entradas en el mismo orden que en el nodo (X,Y) predefinido.

Llamada a nodos: Crear, Acciones y Consulta

Puede invocar cualquier nodo normal de la biblioteca a través de un bloque de código siempre que el nodo no sea un nodo de "IU" especial, los que tienen una función de interfaz de usuario especial. Por ejemplo, puede invocar a Circle.ByCenterPointRadius, pero no tendría mucho sentido invocar a un nodo Watch 3D.

Los nodos normales (la mayoría de los incluidos en la biblioteca) suelen ser de tres tipos. DescubrirÔ que la biblioteca se organiza teniendo en cuenta estas categorías. Los métodos o nodos de estos tres tipos se tratan de forma diferente cuando se invocan desde un bloque de código.

  1. Crear: crea (o construye) algo.

  2. Acción: realiza una acción sobre algún elemento.

  3. Consulta: obtiene una propiedad de algĆŗn elemento que ya existe.

Crear

La categoría "Crear" genera geometría desde cero. En el bloque de código, los valores se introducen de izquierda a derecha. Estas entradas estÔn en el mismo orden que las entradas del nodo de arriba abajo.

Si comparamos el nodo Line.ByStartPointEndPoint y la sintaxis correspondiente en el bloque de código, vemos que se obtienen los mismos resultados.

Acción

Una acción es algo que se hace a un objeto de un tipo concreto. Dynamo utiliza la notación de puntos, común a muchos idiomas de codificación, para aplicar una acción a un elemento. Una vez que tenga el elemento, escriba un punto y, a continuación, el nombre de la acción. La entrada del método de acción se coloca entre paréntesis, del mismo modo que con los métodos de creación, solo que no es necesario especificar la primera entrada que se ve en el nodo correspondiente. En su lugar, especificamos el elemento en el que realizamos la acción:

  1. El nodo Point.Add es un nodo de acción, por lo que la sintaxis funciona de forma algo distinta.

  2. Las entradas son (1) el punto y (2) el vector que añadir. En un bloque de código, hemos designado al punto (el elemento) "pt". Para añadir un vector denominado "vec" a "pt", escribimos pt.Add(vec), o elemento, punto, acción. La acción Add (añadir) solo tiene una entrada o todas las entradas del nodo Point.Add menos la primera. La primera entrada del nodo Point.Add es el punto en sí.

Consulta

Los mƩtodos de consulta obtienen una propiedad de un objeto. Dado que el objeto en sƭ es la entrada, no es necesario especificar ninguna entrada. No se requieren parƩntesis.

Acerca del encaje

El encaje con nodos es algo diferente al encaje con el bloque de código. Con los nodos, el usuario hace clic con el botón derecho en el nodo y selecciona la opción de encaje que se va a utilizar. Con el bloque de código, el usuario tiene mucho mÔs control sobre la estructura de los datos. El método de abreviatura del bloque de código utiliza guías de replicación para definir cómo se deben emparejar varias listas unidimensionales. Los números entre corchetes angulares "<>" definen la jerarquía de la lista anidada: <1>,<2>,<3>, etc.

  1. En este ejemplo, se utiliza un método abreviado para definir dos rangos (la siguiente sección de este capítulo contiene mÔs información sobre el método abreviado). En resumen, 0..1; es equivalente a {0,1} y -3..-7 es equivalente a {-3,-4,-5,-6,-7}. El resultado nos proporciona listas de 2 valores X y 5 valores Y. Si no utilizamos guías de replicación con estas listas no coincidentes, obtenemos una lista de dos puntos, que es la longitud de la lista mÔs corta. Con las guías de replicación, podemos encontrar todas las combinaciones posibles de 2 y 5 coordenadas (o un producto vectorial).

  2. Mediante la sintaxis Point.ByCoordinates(x_vals<1>,y_vals<2>);, se obtienen dos listas con cinco elementos en cada lista.

  3. Mediante la sintaxis Point.ByCoordinates(x_vals<2>,y_vals<1>);, se obtienen cinco listas con dos elementos en cada lista.

Con esta notación, también podemos especificar cuÔl serÔ la lista dominante: dos listas de cinco elementos o cinco listas de dos elementos. En el ejemplo, al cambiar el orden de las guías de replicación, el resultado es una lista de filas de puntos o una lista de columnas de puntos en una rejilla.

Nodo para código

Aunque pueda hacer falta algo de tiempo para acostumbrarse a los métodos de bloqueo anteriores, en Dynamo existe una función denominada "nodo para código" que facilita el proceso. Para utilizar esta función, seleccione una matriz de nodos en el grÔfico de Dynamo, haga clic con el botón derecho en el lienzo y seleccione "Nodo para código". Dynamo comprime estos nodos en un bloque de código con todas las entradas y salidas. No solo es una excelente herramienta para aprender a utilizar bloques de código, sino que también permite trabajar con un grÔfico Dynamo mÔs eficaz y paramétrico. Concluiremos el siguiente ejercicio utilizando "Nodo para código", así que no se lo pierda.

Ejercicio: atractor de superficie

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Para mostrar la eficacia del bloque de código, vamos a convertir una definición de campo atractor existente al lenguaje del bloque de código. Al trabajar con una definición existente, se muestra cómo se relaciona el bloque de código con las secuencias de comandos visuales y es útil para aprender a utilizar la sintaxis de DesignScript.

Comience volviendo a crear la definición de la imagen anterior (o abriendo el archivo de muestra).

  1. Observe que el encaje en Point.ByCoordinates se ha establecido en Producto vectorial.

  2. Cada punto de una rejilla se desplaza hacia arriba en la dirección Z en función de su distancia con respecto al punto de referencia.

  3. Se vuelve a crear una superficie y se engrosa, lo que genera una curvatura en la geometrĆ­a relativa a la distancia con respecto al punto de referencia.

  1. Para empezar, definamos primero el punto de referencia: Point.ByCoordinates(x,y,0);. Utilizaremos la misma sintaxis de Point.ByCoordinates que se especifica en la parte superior del nodo de punto de referencia.

  2. Las variables x e y se insertan en el bloque de código para que podamos actualizarlas dinÔmicamente con los controles deslizantes.

  3. Añada algunos controles deslizantes a las entradas del bloque de código que vayan del -50 al 50. De este modo, podemos abarcar la rejilla por defecto de Dynamo.

  1. En la segunda línea del bloque de código, definimos una abreviatura para reemplazar el nodo de secuencia numérica: coordsXY = (-50..50..#11);. Abordaremos mÔs detalladamente este tema en la siguiente sección. Por ahora, observe que este método abreviado es equivalente al nodo Number Sequence de la secuencia de comandos visual.

  1. Ahora vamos a crear una rejilla de puntos a partir de la secuencia coordsXY. Para ello, vamos a utilizar la sintaxis Point.ByCoordinates, pero tambiƩn debemos iniciar un producto vectorial de la lista de la misma forma que lo hicimos en la secuencia de comandos visual. Para ello, escribimos la siguiente lƭnea: gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);. Los corchetes angulares indican la referencia de producto vectorial.

  2. Observe en el nodo Watch3D que tenemos una rejilla de puntos en la rejilla de Dynamo.

  1. Ahora llega la parte compleja: mover la rejilla de puntos hacia arriba según su distancia con respecto al punto de referencia. Llamaremos primero a este nuevo conjunto de puntos transPts. Como la traslación es una acción que se lleva a cabo en un elemento existente, en lugar de utilizar Geometry.Translate..., utilizamos gridPts.Translate.

  2. Al leer el nodo real en el lienzo, vemos que hay tres entradas. La geometría que se va a trasladar ya se ha definido porque llevamos a cabo la acción en ese elemento (con gridPts.Translate). Las dos entradas restantes se insertarÔn en los paréntesis de las funciones: dirección y distancia.

  3. Definir la dirección es sencillo; utilizamos Vector.ZAxis() para realizar un movimiento vertical.

  4. La distancia entre el punto de referencia y cada punto de rejilla aún debe calcularse. Por lo tanto, lo hacemos como una acción al punto de referencia del mismo modo: refPt.DistanceTo(gridPts).

  5. La última línea de código nos proporciona los puntos convertidos: transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));.

  1. Ahora tenemos una rejilla de puntos con la estructura de datos adecuada para crear una superficie NURBS. Creamos la superficie mediante srf = NurbsSurface.ByControlPoints(transPts);.

  1. Por último, para añadir cierta profundidad a la superficie, construimos un sólido mediante solid = srf.Thicken(5);. En este caso, hemos engrosado la superficie 5 unidades en el código, pero siempre podríamos definirla como una variable, denominÔndola "thickness" (grosor), por ejemplo, y después controlar ese valor con un control deslizante.

Simplificar el grÔfico con "Nodo para código"

La función "nodo para código" automatiza todo el ejercicio que acabamos de completar con un solo clic. No solo es una herramienta eficaz para crear definiciones personalizadas y bloques de código reutilizables, sino que también es una herramienta muy útil para aprender a usar las secuencias de comandos de Dynamo:

  1. Empiece con la secuencia de comandos visual existente del paso 1 del ejercicio. Seleccione todos los nodos, haga clic con el botón derecho en el lienzo y seleccione "Nodo para código". Así de fÔcil.

Dynamo crea de forma automÔtica una versión basada en texto del grÔfico visual, con el encaje incluido. Pruebe esta función con las secuencias de comandos visuales y aproveche las posibilidades del bloque de código.

Primitivas geomƩtricas

CoordinateSystem

Aunque Dynamo puede crear diversas formas geomƩtricas complejas, las primitivas geomƩtricas simples forman la espina dorsal de cualquier diseƱo computacional: expresadas directamente en la forma diseƱada final o utilizadas como andamiaje a partir del que se genera geometrƭa mƔs compleja.

Aunque no es estrictamente una parte de la geometría, CoordinateSystem es una herramienta importante para crear geometría. Un objeto CoordinateSystem realiza un seguimiento de las transformaciones geométricas y de posición, como la rotación, el corte y la escala.

Para crear un CoordinateSystem centrado en un punto con x = 0, y = 0 y z = 0 sin transformaciones de rotación, escala o corte, basta con llamar al constructor Identity:

Los objetos CoordinateSystem con transformaciones geomƩtricas se encuentran fuera del Ɣmbito de este capƭtulo, aunque otro constructor permite crear un sistema de coordenadas en un punto especƭfico, CoordinateSystem.ByOriginVectors:

Punto

La primitiva geométrica mÔs sencilla es un punto, que representa una ubicación de cero dimensiones en un espacio tridimensional. Como se ha mencionado anteriormente, existen varias formas diferentes de crear un punto en un sistema de coordenadas específico: Point.ByCoordinates crea un punto con las coordenadas X, Y y Z especificadas; Point.ByCartesianCoordinates crea un punto con las coordenadas X, Y y Z especificadas en un determinado sistema de coordenadas; Point.ByCylindricalCoordinates crea un punto en un cilindro con un radio, un Ôngulo de rotación y una altura, y Point.BySphericalCoordinates crea un punto en una esfera con un radio y dos Ôngulos de rotación.

En este ejemplo, se muestran puntos creados en varios sistemas de coordenadas:

LĆ­nea

La siguiente primitiva de Dynamo dimensional superior es un segmento de línea, que representa un número infinito de puntos entre dos puntos finales. Las líneas se pueden crear indicando explícitamente los dos puntos de contorno con el constructor Line.ByStartPointEndPoint o especificando un punto inicial, una dirección y una longitud en esa dirección, Line.ByStartPointDirectionLength.

Primitivas 3D: cubo, cono, cilindro, esfera, etc.

Dynamo tiene objetos que representan los tipos mƔs bƔsicos de primitivas geomƩtricas en tres dimensiones: cubos, creados con Cuboid.ByLengths; conos, creados con Cone.ByPointsRadius y Cone.ByPointsRadii; cilindros, creados con Cylinder.ByRadiusHeight, y esferas, creadas con Sphere.ByCenterPointRadius.

¿De qué color es la manzana?

Manazana.color

rojo

ĀæEstĆ” madura la manzana?

Manzana.madura

verdadero

¿CuÔnto pesa la manzana?

Manzana.peso

170 g

¿De dónde viene la manzana?

Manzana.padre

Ɣrbol

¿Qué crea la manzana?

Manzana.hijo

semillas

ĀæEsta manzana se ha producido de forma local?

Manzana.distanciaDeHuerta

96 km

14KB
Dynamo-Syntax_Attractor-Surface.dyn
Open
NodeNames
// create a CoordinateSystem at x = 0, y = 0, z = 0,
// no rotations, scaling, or sheering transformations

cs = CoordinateSystem.Identity();
// create a CoordinateSystem at a specific location,
// no rotations, scaling, or sheering transformations
x_pos = 3.6;
y_pos = 9.4;
z_pos = 13.0;

origin = Point.ByCoordinates(x_pos, y_pos, z_pos);
identity = CoordinateSystem.Identity();

cs = CoordinateSystem.ByOriginVectors(origin,
    identity.XAxis, identity.YAxis, identity.ZAxis);
// create a point with x, y, and z coordinates
x_pos = 1;
y_pos = 2;
z_pos = 3;

pCoord = Point.ByCoordinates(x_pos, y_pos, z_pos);

// create a point in a specific coordinate system
cs = CoordinateSystem.Identity();
pCoordSystem = Point.ByCartesianCoordinates(cs, x_pos,
    y_pos, z_pos);

// create a point on a cylinder with the following
// radius and height
radius = 5;
height = 15;
theta = 75.5;

pCyl = Point.ByCylindricalCoordinates(cs, radius, theta,
    height);

// create a point on a sphere with radius and two angles

phi = 120.3;

pSphere = Point.BySphericalCoordinates(cs, radius,
    theta, phi);
p1 = Point.ByCoordinates(-2, -5, -10);
p2 = Point.ByCoordinates(6, 8, 10);

// a line segment between two points
l2pts = Line.ByStartPointEndPoint(p1, p2);

// a line segment at p1 in direction 1, 1, 1 with
// length 10
lDir = Line.ByStartPointDirectionLength(p1,
    Vector.ByCoordinates(1, 1, 1), 10);
// create a cuboid with specified lengths
cs = CoordinateSystem.Identity();

cub = Cuboid.ByLengths(cs, 5, 15, 2);

// create several cones
p1 = Point.ByCoordinates(0, 0, 10);
p2 = Point.ByCoordinates(0, 0, 20);
p3 = Point.ByCoordinates(0, 0, 30);

cone1 = Cone.ByPointsRadii(p1, p2, 10, 6);
cone2 = Cone.ByPointsRadii(p2, p3, 6, 0);

// make a cylinder
cylCS = cs.Translate(10, 0, 0);

cyl = Cylinder.ByRadiusHeight(cylCS, 3, 10);

// make a sphere
centerP = Point.ByCoordinates(-10, -10, 0);

sph = Sphere.ByCenterPointRadius(centerP, 5);
Logo

Tipo de datos

Dynamo estƔndar

Bloque de código equivalente

NĆŗmeros

Cadenas

Secuencias

Rangos

Obtener elemento en Ć­ndice

Crear lista

Concatenar cadenas

Instrucciones condicionales

Nodo(s)

Bloque de código equivalente

Nota

Cualquier operador (+, &&, >=, Not, etc.)

+, &&, >=, !, etc.

Tenga en cuenta que "Not" se convierte en "!", pero el nodo se denomina "Not" para distinguirlo de "Factorial".

Boolean True

true;

Se deben respetar las minĆŗsculas.

Boolean False

false;

Se deben respetar las minĆŗsculas.

20KB
Obsolete-Nodes_Sine-Surface.dyn
Open

Listas de n dimensiones

AdentrÔndonos aún mÔs en el laberinto, vamos a agregar mÔs niveles a la jerarquía. La estructura de datos puede ampliarse mucho mÔs allÔ de una lista de listas bidimensional. Dado que las listas son elementos en sí mismos en Dynamo, podemos crear datos con tantas dimensiones como sea posible.

La analogƭa con la que trabajaremos aquƭ son las muƱecas rusas. Cada lista se puede considerar como un contenedor que contiene varios elementos. Cada lista tiene sus propias propiedades y tambiƩn se considera su propio objeto.

MuƱecas

Un conjunto de muƱecas rusas (fotografƭa de Zeta) es una analogƭa de las listas de n dimensiones. Cada capa representa una lista y cada lista contiene elementos. En el caso de Dynamo, cada contenedor puede tener varios contenedores dentro (que representan los elementos de cada lista).

Las listas de n dimensiones son difƭciles de explicar visualmente, pero hemos configurado algunos ejercicios en este capƭtulo que se centran en trabajar con listas que van mƔs allƔ de las dos dimensiones.

Asignación y combinaciones

La asignación es, probablemente, la parte mÔs compleja de la administración de datos en Dynamo y es especialmente relevante al trabajar con jerarquías de listas complejas. Con la serie de ejercicios incluidos a continuación, mostraremos cuÔndo utilizar la asignación y las combinaciones a medida que los datos se convierten en datos multidimensionales.

Las introducciones preliminares a List.Map y List.Combine se pueden encontrar en la sección anterior. En el último ejercicio de los que se incluyen a continuación, usaremos estos nodos en una estructura de datos compleja.

Ejercicio - Listas 2D: nivel bƔsico

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

33KB
n-Dimensional-Lists.zip
archive
Open

Este es el primero de una serie de tres ejercicios que se centra en la articulación de la geometría importada. Cada parte de esta serie de ejercicios aumentarÔ en la complejidad de la estructura de datos.

Ejercicio
  1. Comencemos con el archivo .sat de la carpeta de archivos del ejercicio. Se puede acceder a este archivo mediante el nodo File Path.

  2. Con Geometry.ImportFromSAT, la geometrĆ­a se importa a nuestra vista preliminar de Dynamo como dos superficies.

En este sencillo ejercicio, vamos a trabajar con una de las superficies.

  1. Seleccionaremos el índice de 1 para capturar la superficie superior. Esta acción se realiza con el nodo List.GetItemAtIndex.

  2. Desactive la vista preliminar de geometrĆ­a de la vista preliminar de Geometry.ImportFromSAT.

El siguiente paso es dividir la superficie en una rejilla de puntos.

1. Mediante el bloque de código, inserte estas dos líneas de código: 0..1..#10; 0..1..#5;.

2. Con Surface.PointAtParameter, conecte los dos valores del bloque de código a u y v. Cambie el encaje de este nodo a "Producto vectorial".

3. La salida muestra la estructura de datos, que tambiƩn estƔ visible en la vista preliminar de Dynamo.

A continuación, utilice los puntos del último paso para generar 10 curvas a lo largo de la superficie.

  1. Para obtener información sobre cómo se organiza la estructura de datos, conectemos un nodo NurbsCurve.ByPoints a la salida de Surface.PointAtParameter.

  2. Por ahora, puede desactivar la vista preliminar del nodo List.GetItemAtIndex para obtener un resultado mƔs claro.

  1. Un nodo List.Transpose bƔsico cambiarƔ las columnas y las filas de una lista de listas.

  2. Al conectar la salida de List.Transpose a NurbsCurve.ByPoints, se obtienen cinco curvas que discurren horizontalmente a travƩs de la superficie.

  3. Puede desactivar la vista preliminar del nodo NurbsCurve.ByPoints en el paso anterior para obtener el mismo resultado en la imagen.

Ejercicio - Listas 2D: nivel avanzado

Aumentemos la complejidad. Supongamos que deseamos realizar una operación en las curvas creadas en el ejercicio anterior. Tal vez nos gustaría relacionar estas curvas con otra superficie y solevar entre ellas. Esto requiere mÔs atención en la estructura de datos, pero la lógica subyacente es la misma.

  1. Comience con un paso del ejercicio anterior, aislando la superficie superior de la geometrĆ­a importada con el nodo List.GetItemAtIndex.

  1. Con Surface.Offset, desfase la superficie con un valor de 10.

  1. Del mismo modo que en el ejercicio anterior, defina un bloque de código con estas dos líneas de código: 0..1..#10; 0..1..#5;.

  2. Conecte estas salidas a dos nodos Surface.PointAtParameter, cada uno con el encaje establecido en "Producto vectorial". Uno de estos nodos estĆ” conectado a la superficie original, mientras que el otro estĆ” conectado a la superficie desfasada.

  1. Desactive la vista preliminar de estas superficies.

  2. Como en el ejercicio anterior, conecte la salida a dos nodos NurbsCurve.ByPoints. En el resultado, se muestran las curvas correspondientes a dos superficies.

  1. Con List.Create, podemos combinar los dos conjuntos de curvas en una lista de listas.

  2. Observe en la salida que tenemos dos listas con 10 elementos cada una que representan cada conjunto de conexiones de curvas NURBS.

  3. Al ejecutar Surface.ByLoft, podemos visualizar con claridad esta estructura de datos. El nodo soleva todas las curvas de cada sublista.

  1. Desactive la vista preliminar del nodo Surface.ByLoft en el paso anterior.

  2. Al utilizar List.Transpose, recuerde que estamos volteando todas las columnas y filas. Este nodo transferirĆ” dos listas de diez curvas a diez listas de dos curvas. Ahora cada curva NURBS estĆ” relacionada con la curva contigua de la otra superficie.

  3. Con Surface.ByLoft, llegamos a una estructura con nervios.

A continuación, mostraremos un proceso alternativo para lograr este resultado.

  1. Antes de empezar, desactive la vista preliminar de Surface.ByLoft en el paso anterior para evitar confusiones.

  2. Una alternativa a List.Transpose es utilizar List.Combine. Esta acción pondrÔ en funcionamiento un "combinador" en cada sublista.

  3. En este caso, utilizaremos List.Create como "combinador", que crearĆ” una lista de cada elemento de las sublistas.

  4. Con el nodo Surface.ByLoft, se obtienen las mismas superficies que en el paso anterior. La transposición es mÔs fÔcil de utilizar en este caso, pero cuando la estructura de datos se vuelve mÔs compleja, List.Combine es mÔs fiable.

  1. Retrocediendo unos pasos, si deseamos cambiar la orientación de las curvas en la estructura con nervios, debemos utilizar un nodo List.Transpose antes de conectar con NurbsCurve.ByPoints. Esto invertirÔ las columnas y las filas, lo que nos darÔ cinco nervios horizontales.

Ejercicio - Listas 3D

Ahora, vamos a ir un paso mÔs allÔ. En este ejercicio, trabajaremos con ambas superficies importadas y crearemos una jerarquía de datos compleja. Aun así, nuestro objetivo es completar la misma operación con la misma lógica subyacente.

Comience con el archivo importado del ejercicio anterior.

  1. Como en el ejercicio anterior, utilice el nodo Surface.Offset para desfasar por un valor de 10.

  2. Observe en la salida que hemos creado dos superficies con el nodo de desfase.

  1. Del mismo modo que en el ejercicio anterior, defina un bloque de código con estas dos líneas de código: 0..1..#20; 0..1..#20;.

  2. Conecte estas salidas a dos nodos Surface.PointAtParameter, cada uno con el encaje establecido en "Producto vectorial". Uno de estos nodos estĆ” conectado a las superficies originales, mientras que el otro estĆ” conectado a las superficies desfasadas.

  1. Como en el ejercicio anterior, conecte la salida a dos nodos NurbsCurve.ByPoints.

  2. En la salida de NurbsCurve.ByPoints, observe que se trata de una lista de dos listas, que es mÔs compleja que la del ejercicio anterior. Los datos se clasifican según la superficie subyacente, por lo que hemos añadido otro nivel a los datos estructurados.

  3. Observe que los datos se vuelven mƔs complejos en el nodo Surface.PointAtParameter. En este caso, tenemos una lista compuesta por listas de listas.

  1. Antes de continuar, desactive la vista preliminar de las superficies existentes.

  2. Con el nodo List.Create, se fusionan las curvas NURBS en una estructura de datos, lo que crea una lista de listas de listas.

  3. Al conectar un nodo Surface.ByLoft, se obtiene una versión de las superficies originales, ya que cada una de ellas permanece en su propia lista tal como se crearon a partir de la estructura de datos original.

  1. En el ejercicio anterior, pudimos utilizar List.Transpose para crear una estructura con nervios. Esto no funcionaría aquí. La transposición se debe utilizar en una lista bidimensional y, puesto que tenemos una lista tridimensional, una operación de "voltear columnas y filas" no funcionaría de manera tan sencilla. Recuerde que las listas son objetos, de modo que List.Transpose voltearía las listas sin sublistas, pero no voltearía las curvas NURBS ubicadas una lista mÔs abajo en la jerarquía.

  1. List.Combine funcionarƔ mejor aquƭ. Debemos usar los nodos List.Map y List.Combine cuando trabajamos con estructuras de datos mƔs complejas.

  2. Al utilizar List.Create como "combinador", creamos una estructura de datos que funcionarĆ” mejor para nosotros.

  1. La estructura de datos aún debe transponerse un paso hacia abajo en la jerarquía. Para ello, utilizaremos List.Map. Funciona como List.Combine, salvo que utiliza solo una lista de entrada, en lugar de dos o mÔs.

  2. La función que aplicaremos a List.Map es List.Transpose, que voltearÔ las columnas y las filas de las sublistas de nuestra lista principal.

  1. Por Ćŗltimo, podemos solevar las curvas NURBS junto con una jerarquĆ­a de datos adecuada, lo que nos proporciona una estructura con nervios.

  1. AƱadamos profundidad a la geometrƭa mediante un nodo Surface.Thicken con los parƔmetros de entrada, como se muestra.

  1. SerƔ recomendable una superficie que respalde tambiƩn esta estructura, por lo que aƱada otro nodo Surface.ByLoft y utilice la primera salida de NurbsCurve.ByPoints de un paso anterior como entrada.

  2. A medida que se sobrecargue la vista preliminar, desactive la vista preliminar de estos nodos. Para ello, haga clic con el botón derecho en cada uno de ellos y desactive la opción "vista preliminar" para ver mejor el resultado.

  1. Y si engrosamos las superficies seleccionadas, la articulación estÔ completa.

No es la mecedora mÔs cómoda del mercado, pero hay muchos datos en ella.

En el último paso, vamos a invertir la dirección de los miembros estriados. Como ya usamos la transposición en el ejercicio anterior, haremos algo similar aquí.

  1. Tenemos un nivel mÔs en la jerarquía, por lo que debemos utilizar List.Map con la función List.Transpose para cambiar la dirección de las curvas NURBS.

  1. Es posible que deseemos aumentar el número de huellas. Para ello, podemos cambiar el bloque de código al siguiente: 0..1..#20; 0..1..#30;.

La primera versión de la mecedora era elegante, así que nuestro segundo modelo ofrece una versión todoterreno del asiento reclinable.

Python y Revit

Python y Revit

Ahora que hemos mostrado cómo utilizar las secuencias de comandos de Python en Dynamo, vamos a echar un vistazo a la conexión de bibliotecas de Revit en el entorno de secuencias de comandos. Recuerde que hemos importado los nodos estÔndar de Python y nuestros nodos centrales de Dynamo con las tres primeras líneas del bloque de código mostrado a continuación. Para importar los nodos de Revit, los elementos de Revit y el administrador de documentos de Revit, solo hemos de añadir algunas líneas mÔs:

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit

# Import Revit elements
from Revit.Elements import *

# Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

import System

Esto nos permite acceder a la API de Revit y disponer de secuencias de comandos personalizadas para cualquier tarea de Revit. La combinación del proceso de programación visual con las secuencias de comandos de la API de Revit, mejora significativamente la colaboración y el desarrollo de herramientas. Por ejemplo, un administrador de BIM y un diseñador de esquemas pueden trabajar juntos en el mismo grÔfico. En esta colaboración, pueden mejorar el diseño y la ejecución del modelo.

API especĆ­ficas de plataforma

El plan tras el proyecto de Dynamo es ampliar el alcance de la implementación de plataformas. A medida que Dynamo añada mÔs programas a la lista, los usuarios obtendrÔn acceso a las API específicas de plataforma desde el entorno de secuencias de comandos de Python. Aunque Revit representa el caso real de esta sección, podemos prever mÔs capítulos en el futuro que ofrecerÔn módulos de aprendizaje completos sobre secuencias de comandos en otras plataformas. AdemÔs, hay muchas bibliotecas de IronPython a las que se puede acceder ahora y que se pueden importar a Dynamo.

En los siguientes ejemplos, se muestran métodos para implementar operaciones específicas de Revit desde Dynamo mediante el uso de Python. Para obtener una descripción mÔs detallada de la relación de Python con Dynamo y Revit, consulte la pÔgina wiki de Dynamo. Otro recurso útil para Python y Revit es el proyecto Revit Python Shell.

Ejercicio 1

Cree un nuevo proyecto de Revit.

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

2KB
Revit-Doc.dyn
Open

En estos ejercicios, vamos a explorar secuencias de comandos bÔsicas de Python en Dynamo for Revit. El ejercicio se centrarÔ en el uso de los archivos y elementos de Revit, así como en la comunicación entre Revit y Dynamo.

Este es un método sencillo para recuperar los elementos doc, uiapp y app del archivo de Revit vinculado a la sesión de Dynamo. Es posible que los programadores que hayan trabajado antes en la API de Revit reconozcan los elementos de la lista de inspección. Si estos elementos no le resultan familiares, no hay problema; vamos a usar otros ejemplos en los ejercicios siguientes.

A continuación, se indica cómo vamos a importar los servicios de Revit y recuperar los datos del documento en Dynamo.

Eche un vistazo al nodo de Python en Dynamo. También puede encontrar el código a continuación:

# Load the Python Standard and DesignScript Libraries
import sys
import clr

#Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

#Place your code below this line
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

#Assign your output to the OUT variable
OUT = [doc,uiapp,app]

Ejercicio 2

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

10KB
Revit-ReferenceCurve.dyn
Open

En este ejercicio, crearemos una curva de modelo simple en Revit mediante el nodo de Dynamo Python.

Empiece creando una nueva familia de masas conceptuales en Revit.

Abra la carpeta de masas conceptuales y utilice el archivo de plantilla Metric Mass.rft.

En Revit, utilice el método abreviado de teclado un para que se muestre la configuración de unidades del proyecto y cambie la unidad de longitud a metros.

Inicie Dynamo y cree el conjunto de nodos de la imagen siguiente. Crearemos primero dos puntos de referencia en Revit a partir de los nodos de Dynamo.

  1. Cree un bloque de código y asígnele el valor "0;".

  2. Conecte este valor a un nodo ReferencePoint.ByCoordinates para las entradas X, Y y Z.

  3. Cree tres controles deslizantes que vayan de -100 a 100 con un tamaƱo de paso de 1.

  4. Conecte cada control deslizante a un nodo ReferencePoint.ByCoordinates.

  5. Añada un nodo de Python al espacio de trabajo, haga clic en el botón "+" del nodo para añadir otra entrada y conecte los dos puntos de referencia en cada entrada. Abra el nodo de Python.

Eche un vistazo al nodo de Python en Dynamo. A continuación, se muestra el código completo.

  1. System.Array: Revit necesita una matriz del sistema como entrada (en lugar de una lista de Python). Esta es solo una línea de código mÔs, pero prestar atención a los tipos de argumentos facilitarÔ la programación de Python en Revit.

import sys
import clr

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
#Import Revit elements
from Revit.Elements import *
import System

#define inputs
startRefPt = IN[0]
endRefPt = IN[1]

#define system array to match with required inputs
refPtArray = System.Array[ReferencePoint]([startRefPt, endRefPt])

#create curve by reference points in Revit
OUT = CurveByPoints.ByReferencePoints(refPtArray)

En Dynamo, hemos creado dos puntos de referencia con una lƭnea que los conecta mediante Python. Vamos a ir un poco mƔs lejos en el siguiente ejercicio.

Ejercicio 3

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

3MB
Revit-StructuralFraming.zip
archive
Open

Este es un ejercicio sencillo, pero hace hincapié en la conexión de los datos y la geometría de Revit con Dynamo y viceversa. Comencemos abriendo Revit-StructuralFraming.rvt. Una vez abierto, inicie Dynamo y abra el archivo Revit-StructuralFraming.dyn.

Este archivo de Revit es totalmente bÔsico. Dos curvas de referencia: una dibujada en el nivel 1 y la otra dibujada en el nivel 2. Queremos llevar estas curvas a Dynamo y mantener una conexión activa.

En este archivo, tenemos un conjunto de nodos conectados a cinco entradas de un nodo de Python.

  1. Nodos Select Model Element: pulse el botón de selección para cada uno de ellos y seleccione la curva correspondiente en Revit.

  2. Code Block: mediante la sintaxis 0..1..#x;, conecte un control deslizante de enteros que abarque de 0 a 20 en la entrada x. De este modo, se designa el número de vigas que se dibujarÔn entre las dos curvas.

  3. Structural Framing Types: en el menĆŗ desplegable, elija la viga por defecto W12x26.

  4. Levels: seleccione "Level 1".

Este código de Python es un poco mÔs denso, pero los comentarios del código describen lo que sucede en el proceso.

import clr
#import Dynamo Geometry
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
# Import Revit elements
from Revit.Elements import *
import System

#Query Revit elements and convert them to Dynamo Curves
crvA=IN[0].Curves[0]
crvB=IN[1].Curves[0]

#Define input Parameters
framingType=IN[3]
designLevel=IN[4]

#Define "out" as a list
OUT=[]

for val in IN[2]:
	#Define Dynamo Points on each curve
	ptA=Curve.PointAtParameter(crvA,val)
	ptB=Curve.PointAtParameter(crvB,val)
	#Create Dynamo line
	beamCrv=Line.ByStartPointEndPoint(ptA,ptB)
	#create Revit Element from Dynamo Curves
	beam = StructuralFraming.BeamByCurve(beamCrv,designLevel,framingType)
	#convert Revit Element into list of Dynamo Surfaces
	OUT.append(beam.Faces)

En Revit, tenemos una matriz de vigas que abarca las dos curvas como elementos estructurales. Nota: Este no es un ejemplo realista; los elementos estructurales se utilizan como ejemplo de ejemplares nativos de Revit creados a partir de Dynamo.

En Dynamo, tambiƩn podemos ver los resultados. Las vigas del nodo Watch3D hacen referencia a la geometrƭa consultada desde los elementos de Revit.

Observe que existe un proceso continuo de traslación de datos del entorno de Revit al entorno de Dynamo. En resumen, así es como se desarrolla el proceso:

  1. Se selecciona el elemento de Revit.

  2. Se convierte el elemento de Revit en curva de Dynamo.

  3. Se divide la curva de Dynamo en una serie de puntos de Dynamo.

  4. Se utilizan los puntos de Dynamo entre dos curvas para crear lĆ­neas de Dynamo.

  5. Se crean vigas de Revit mediante referencias a lĆ­neas de Dynamo.

  6. Se generan superficies de Dynamo mediante una consulta sobre la geometrĆ­a de las vigas de Revit.

Esto puede parecer un poco pesado, pero la secuencia de comandos hace que sea tan sencillo como editar la curva en Revit y volver a ejecutar el solucionador (aunque es posible que deba suprimir las vigas anteriores al hacerlo). Esto se debe al hecho de que hemos colocado vigas en Python, lo que rompe la asociación que tienen los nodos OOTB.

Con una actualización de las curvas de referencia de Revit, obtenemos una nueva matriz de vigas.

Color

El color es un excelente tipo de datos para crear imÔgenes convincentes, así como para renderizar la diferencia en la salida del programa visual. Cuando se trabaja con datos abstractos y números variables, a veces es difícil ver qué se estÔ cambiando y en qué grado. Esta es una aplicación excelente para los colores.

Creación de colores

Los colores de Dynamo se crean con entradas de ARGB. Estas corresponden a los canales alfa, rojo, verde y azul. El canal alfa representa la transparencia del color, mientras que los otros tres se utilizan como colores principales para generar todo el espectro de color sincronizado.

Icono
Nombre (sintaxis)
Entradas
Salidas

Consulta de los valores de color

Los colores de la tabla siguiente consultan las propiedades utilizadas para definir el color: alfa, rojo, verde y azul. Observe que el nodo Color.Components nos proporciona las cuatro salidas diferentes, lo que hace que este nodo sea preferible para consultar las propiedades de un color.

Icono
Nombre (sintaxis)
Entradas
Salidas

Los colores de la tabla siguiente corresponden al espacio de color HSB. La división del color en el matiz, la saturación y el brillo es, probablemente, mÔs intuitiva en la forma en que se interpreta el color: ¿Qué color debería ser? ¿Debería ser mÔs o menos colorido? ¿Y debería ser mÔs o menos claro u oscuro? Este es el desglose del matiz, la saturación y el brillo respectivamente.

Icono
Nombre (sintaxis)
Entradas
Salidas

Color Range

El rango de color es similar al nodo Remap Range del ejercicio ; asigna de nuevo una lista de nĆŗmeros a otro dominio. Sin embargo, en lugar de asignarla a un dominio de nĆŗmero, la asigna a un degradado de color basado en nĆŗmeros de entrada que van del 0 al 1.

El nodo actual funciona bien, pero puede resultar un poco incómodo para que todo funcione la primera vez. La mejor forma de familiarizarse con el degradado de color es probarlo de forma interactiva. Hagamos un ejercicio rÔpido para revisar cómo configurar un degradado con colores de salida que corresponden a números.

  1. Definir tres colores: con un nodo Code Block, defina rojo, verde y azul mediante la conexión de las combinaciones adecuadas de 0 y 255.

  2. Crear lista:fusione los tres colores en una lista.

  3. Definir Ć­ndices: cree una lista para definir las posiciones de pinzamiento de cada color (de 0 a 1). Observe el valor de 0,75 para el verde. De este modo, se coloca el color verde a tres cuartos de camino en el degradado horizontal del control deslizante de rango de colores.

  4. Code Block: valores de entrada (entre 0 y 1) para convertir en colores.

Vista previa de color

El nodo Display.ByGeometry nos permite colorear la geometría en la ventana grÔfica de Dynamo. Esto resulta útil para separar diferentes tipos de geometría, demostrar un concepto paramétrico o definir una leyenda de anÔlisis para la simulación. Las entradas son sencillas, geometría y color. Para crear un degradado como el de la imagen anterior, la entrada de color se conecta al nodo Color Range.

Color en superficies

El nodo Display.BySurfaceColors nos permite asignar datos en una superficie mediante los colores. Esta función ofrece posibilidades interesantes para visualizar los datos obtenidos a través de anÔlisis independientes como anÔlisis solares, de energía o de proximidad. La aplicación de color a una superficie en Dynamo es similar a la aplicación de una textura a un material en otros entornos de CAD. Vamos a demostrar cómo utilizar esta herramienta en el siguiente ejercicio breve.

Ejercicio

HƩlice bƔsica con colores

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Este ejercicio se centra en el control paramétrico del color en paralelo a la geometría. La geometría es una hélice bÔsica que se define a continuación mediante el bloque de código. Esta es una forma rÔpida y sencilla de crear una función paramétrica y, como nuestro enfoque estÔ en el color (en lugar de en la geometría), utilizamos el bloque de código para crear la hélice de forma eficaz sin sobrecargar el lienzo. Utilizaremos el bloque de código con mÔs frecuencia a medida que el manual de introducción se adentre en materiales mÔs avanzados.

  1. Code Block: defina los dos bloques de código con las fórmulas mostradas anteriormente. Este es un método paramétrico rÔpido para crear una espiral.

  2. Point.ByCoordinates: conecte las tres salidas del bloque de código a las coordenadas del nodo.

Ahora se muestra una matriz de puntos que crean una hƩlice. El siguiente paso consiste en crear una curva que atraviese los puntos para que podamos visualizar la hƩlice.

  1. PolyCurve.ByPoints: conecte la salida Point.ByCoordinates en la entrada points del nodo. Se obtiene una curva helicoidal.

  2. Curve.PointAtParameter: conecte la salida de PolyCurve.ByPoints a la entrada curve. La finalidad de este paso es crear un punto atractor paramƩtrico que se deslice a lo largo de la curva. Dado que la curva estƔ evaluando un punto en el parƔmetro, necesitaremos introducir un valor en param entre 0 y 1.

  3. Number Slider: despuƩs de aƱadirlo al lienzo, cambie el valor mƭnimo a 0,0, el valor mƔximo a 1,0 y el valor de paso a 0,01. Conecte la salida del control deslizante a la entrada param de Curve.PointAtParameter. Ahora se muestra un punto a lo largo de la longitud de la hƩlice representado por un porcentaje del control deslizante (0 en el punto inicial, 1 en el punto final).

Con el punto de referencia creado, ahora comparamos la distancia desde el punto de referencia a los puntos originales que definen la hƩlice. Este valor de distancia controlarƔ la geometrƭa y el color.

  1. Geometry.DistanceTo: conecte la salida de Curve.PointAtParameter a la entrada. Conecte Point.ByCoordinates en la entrada geometry.

  2. Watch: la salida resultante muestra una lista de las distancias desde cada punto helicoidal hasta el punto de referencia a lo largo de la curva.

El siguiente paso consiste en controlar los parƔmetros con la lista de distancias entre los puntos helicoidales y el punto de referencia. Utilizamos estos valores de distancia para definir los radios de una serie de esferas a lo largo de la curva. Para mantener las esferas en un tamaƱo adecuado, es necesario reasignar los valores de la distancia.

  1. Math.RemapRange: conecte la salida de Geometry.DistanceTo a la entrada "numbers".

  2. Code Block: conecte un bloque de código con un valor de 0,01 a la entrada newMin y un bloque de código con un valor de 1 a la entrada newMax.

  3. Watch: conecte la salida de Math.RemapRange a un nodo y la salida de Geometry.DistanceTo a otro. Compare los resultados.

Este paso ha reasignado la lista de distancias para que tenga un rango mÔs pequeño. Podemos editar los valores de newMin y newMax según consideremos adecuado. Los valores se reasignarÔn y tendrÔn la misma relación de distribución en todo el dominio.

  1. Sphere.ByCenterPointRadius: conecte la salida de Math.RemapRange a la entrada radius y la salida de Point.ByCoordinates original a la entrada centerPoint.

Cambie el valor del control deslizante de número y observe cómo se actualiza el tamaño de las esferas. Ahora tenemos una guía paramétrica.

El tamaƱo de las esferas muestra la matriz paramƩtrica definida por un punto de referencia a lo largo de la curva. Usaremos el mismo concepto para que el radio de la esfera controle su color.

  1. Color Range: añÔdalo al lienzo. Al pasar el cursor sobre la entrada value, observamos que los números solicitados se encuentran entre 0 y 1. Es necesario volver a asignar los números de la salida de Geometry.DistanceTo para que sean compatibles con este dominio.

  2. Sphere.ByCenterPointRadius: por el momento, desactivemos la vista preliminar en este nodo (Haga clic con el botón derecho > Vista preliminar).

  1. Math.RemapRange: este proceso deberĆ­a resultarle familiar. Conecte la salida de Geometry.DistanceTo a la entrada "numbers".

  2. Code Block: como hicimos en un paso anterior, cree el valor 0 para la entrada newMin y el valor 1 para la entrada newMax. Observe que, en este caso, podemos definir dos salidas de un bloque de código.

  3. Color Range: conecte la salida de Math.RemapRange a la entrada value.

  1. Color.ByARGB: esto es lo que haremos para crear dos colores. Aunque este proceso puede parecer incómodo, es el mismo que el utilizado con los colores RGB en otro software, solo que usamos programación visual para ello.

  2. Code Block: cree dos valores de 0 y 255. Conecte las dos salidas a las dos entradas de Color.ByARGB de acuerdo con la imagen anterior (o cree sus dos colores favoritos).

  3. Color Range: la entrada colors requiere una lista de colores. Se debe crear esta lista a partir de los dos colores creados en el paso anterior.

  4. List.Create: combine los dos colores en una lista. Conecte la salida a la entrada colors de Color Range.

  1. Display.ByGeometryColor: conecte Sphere.ByCenterPointRadius a la entrada geometry y Color Range a la entrada color. Ahora tenemos un degradado suave en el dominio de la curva.

Si se cambia el valor del control deslizante de número mostrado anteriormente, se actualizan los colores y los tamaños. Los colores y el tamaño del radio estÔn directamente relacionados en este caso; ahora tenemos un vínculo visual entre dos parÔmetros.

Ejercicio de color en superficies

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Es necesario crear primero una superficie o hacer referencia a ella para utilizarla como entrada en el nodo Display.BySurfaceColors. En este ejemplo, se realiza la solevación entre una curva seno y coseno.

  1. Este grupo de nodos crea puntos a lo largo del eje Z y los desplaza según las funciones de seno y coseno. Las dos listas de puntos se utilizan a continuación para generar curvas NURBS.

  2. Surface.ByLoft: genere una superficie interpolada entre las curvas NURBS de la lista.

  1. File Path: seleccione un archivo de imagen para muestrear datos de pĆ­xeles.

  2. Utilice File.FromPath para convertir la ruta de archivo en un archivo y, a continuación, pÔselo a Image.ReadFromFile para obtener una imagen para el muestreo.

  3. Image.Pixels: introduzca una imagen y proporcione un valor de muestra para utilizarlo en las cotas X e Y de la imagen.

  4. Control deslizante: proporcione valores de muestra para Image.Pixels.

  5. Display.BySurfaceColors: asigne los valores de matriz de color de la superficie a lo largo de X e Y respectivamente.

Vista preliminar ampliada de la superficie de salida con resolución de 400 x 300 muestras

Creación

Puede crear una matriz de elementos de Revit en Dynamo con control paramétrico completo. Los nodos de Revit en Dynamo permiten importar elementos de geometrías genéricas a tipos de categorías específicos (como muros y suelos). En esta sección, nos centraremos en la importación paramétrica de elementos flexibles con componentes adaptativos.

Componentes adaptativos

Un componente adaptativo es una categoría de familia flexible que se presta bien a las aplicaciones generativas. Una vez creada la instancia, puede crear un elemento geométrico complejo controlado por la ubicación fundamental de los puntos adaptativos.

A continuación, se muestra un ejemplo de un componente adaptativo de tres puntos en el Editor de familias. Esto genera una viga de celosía definida por la posición de cada punto adaptativo. En el ejercicio siguiente, utilizaremos este componente para generar una serie de vigas de celosía en una fachada.

Principios de interoperabilidad

El componente adaptativo es un buen ejemplo de los procedimientos recomendados de interoperabilidad. Podemos crear una matriz de componentes adaptativos mediante la definición de los puntos adaptativos fundamentales. Y, al transferir estos datos a otros programas, tenemos la posibilidad de reducir la geometría a datos simples. La importación y la exportación con un programa como Excel siguen una lógica similar.

Supongamos que un consultor de fachada desea conocer la ubicación de los elementos de la viga de celosía sin necesidad de realizar un anÔlisis mediante geometría totalmente articulada. Para preparar la fabricación, el consultor puede examinar la ubicación de los puntos adaptativos a fin de regenerar la geometría en un programa como Inventor.

El flujo de trabajo que configuraremos en el siguiente ejercicio nos permite acceder a todos estos datos mientras creamos la definición para la creación de elementos de Revit. Mediante este proceso, podemos combinar la conceptualización, la documentación y la fabricación en un flujo de trabajo perfecto. Esto permite generar un proceso mÔs inteligente y eficaz para la interoperabilidad.

Varios elementos y listas

En el , se describe cómo Dynamo consulta los datos para la creación de elementos de Revit. Para generar varios componentes adaptativos, definimos una lista de listas en la que cada lista tiene tres puntos que representan cada punto del componente adaptativo. Tendremos esto en cuenta a medida que gestionamos las estructuras de datos en Dynamo.

Elementos DirectShape

Otro método para importar geometría paramétrica de Dynamo a Revit es DirectShape. En resumen, el elemento DirectShape y las clases relacionadas permiten almacenar formas geométricas creadas externamente en un documento de Revit. La geometría puede incluir mallas o sólidos cerrados. DirectShape se ha diseñado principalmente para la importación de formas de otros formatos de datos, como IFC o STEP, donde no hay suficiente información disponible para crear un elemento de Revit "real". Al igual que en el flujo de trabajo de IFC y STEP, la función DirectShape permite importar sin problemas geometrías creadas en Dynamo a proyectos de Revit como elementos reales.

Repasemos el para importar geometrƭa de Dynamo como DirectShape en el proyecto de Revit. Mediante este mƩtodo, podemos asignar la categorƭa, el material y el nombre de una geometrƭa importada, mientras se mantiene un vƭnculo paramƩtrico con nuestro grƔfico de Dynamo.

Ejercicio: generación de elementos y listas

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Comenzando con el archivo de ejemplo de esta sección (o continuando con el archivo de Revit de la sesión anterior), veremos la misma masa de Revit.

  1. Este es el archivo, tal y como se ha abierto.

  2. Este es el sistema de vigas de celosĆ­a que hemos creado con Dynamo, vinculado de forma inteligente a la masa de Revit.

Hemos utilizado los nodos "Select Model Element" y "Select Face", bajamos un nivel mÔs en la jerarquía y utilizamos "Select Edge". Con el solucionador de Dynamo establecido en "AutomÔtico", el grÔfico se actualizarÔ continuamente con los cambios realizados en el archivo de Revit. El borde que seleccionamos se asocia dinÔmicamente a la topología del elemento de Revit. Mientras la topología* no cambie, la conexión permanecerÔ vinculada entre Revit y Dynamo.

  1. Seleccione la curva superior de la fachada de la cristalera. Esto abarca toda la longitud del edificio. Si tiene problemas para seleccionar el borde, recuerde realizar la selección en Revit. Para ello, coloque el cursor sobre el borde y pulse "Tab" hasta que se resalte el borde seleccionado.

  2. Mediante dos nodos "Select Edge", seleccione cada borde que represente la inclinación en el centro de la fachada.

  3. Realice lo mismo para los bordes inferiores de la fachada en Revit.

  4. En los nodos Watch, se muestra que ahora tenemos lƭneas en Dynamo. Esto se convierte automƔticamente en geometrƭa de Dynamo, ya que los bordes en sƭ no son elementos de Revit. Estas curvas son las referencias que utilizaremos para crear instancias de vigas de celosƭa adaptativas a lo largo de la fachada.

* Para mantener la coherencia de la topologƭa, consultaremos un modelo sin caras o bordes adicionales aƱadidos. Aunque los parƔmetros pueden cambiar su forma, el modo en que se crea sigue siendo coherente.

Debemos unir primero las curvas y fusionarlas en una lista. De esta forma, podemos "agrupar" las curvas para realizar operaciones geomƩtricas.

  1. Cree una lista para las dos curvas del centro de la fachada.

  2. Una las dos curvas en una PolyCurve. Para ello, conecte el componente List.Create a un nodo Polycurve.ByJoinedCurves.

  3. Cree una lista para las dos curvas de la parte inferior de la fachada.

  4. Una las dos curvas en una PolyCurve. Para ello, conecte el componente List.Create a un nodo Polycurve.ByJoinedCurves.

  5. Por Ćŗltimo, una las tres curvas principales (una lĆ­nea y dos PolyCurves) en una lista.

Deseamos aprovechar la curva superior, que es una línea, y representa toda la extensión de la fachada. Crearemos planos a lo largo de esta línea para que se intersequen con el conjunto de curvas que hemos agrupado en una lista.

  1. Con un bloque de código, defina un intervalo mediante la sintaxis: 0..1..#numberOfTrusses;.

  2. Conecte un *control deslizante de enteros *a la entrada del bloque de código. Como podrÔ haber adivinado, esto representarÔ el número de vigas de celosía. Observe que el control deslizante determina el número de elementos del intervalo definido de *0 *a 1.

  3. Conecte el bloque de código a la entrada param de un nodo "Curve.PlaneAtParameter" y conecte el borde superior a la entrada curve. Esto nos darÔ diez planos, distribuidos de forma uniforme a lo largo de la extensión de la fachada.

Un plano es una unidad abstracta de geometría que representa un espacio bidimensional infinito. Los planos son ideales para la creación de contornos y la intersección, tal y como los vamos a configurar en este paso.

  1. Con el nodo Geometry.Intersect (establezca el encaje en producto vectorial), conecte Curve.PlaneAtParameter a la entrada entity del nodo Geometry.Intersect. Conecte el nodo List.Create principal a la entrada geometry. Ahora aparecen puntos en la ventana grÔfica de Dynamo que representan la intersección de cada curva con los planos definidos.

Observe que la salida es una lista de listas de listas. Hay demasiadas listas para nuestros fines. Vamos a realizar un aplanamiento parcial aquí. Debemos bajar un nivel en la lista y aplanar el resultado. Para ello, utilizaremos la operación List.Map, tal y como se explica en el capítulo sobre las listas del manual de introducción.

  1. Conecte el nodo Geometry.Intersect a la entrada de lista de List.Map.

  2. Conecte un nodo Flatten a la entrada f(x) de List.Map. Los resultados proporcionan tres listas, cada una con un nĆŗmero igual a la cantidad de vigas de celosĆ­a.

  3. Debemos cambiar estos datos. Si desea crear una instancia de la viga de celosĆ­a, debemos utilizar el mismo nĆŗmero de puntos adaptativos que se ha definido en la familia. Se trata de un componente adaptativo de tres puntos, por lo que, en lugar de tres listas con 10 elementos cada una (numberOfTrusses), deseamos obtener 10 listas con tres elementos cada una. De este modo, podemos crear 10 componentes adaptativos.

  4. Conecte List.Map a un nodo List.Transpose. Ahora tenemos la salida de datos deseada.

  5. Para confirmar que los datos sean correctos, añada un nodo Polygon.ByPoints al lienzo y realice una comprobación con la vista preliminar de Dynamo.

Del mismo modo que hemos creado los polĆ­gonos, disponemos en una matriz los componentes adaptativos.

  1. AƱada un nodo AdaptiveComponent.ByPoints al lienzo y conecte el nodo List.Transpose a la entrada points.

  2. Mediante un nodo Family Types, seleccione la familia "AdaptiveTruss" y conecte esta a la entrada FamilyType del nodo AdaptiveComponent.ByPoints.

En Revit, ahora las 10 vigas de celosĆ­a se han espaciado uniformemente a lo largo de la fachada.

Al ajustar el grÔfico, hemos aumentado el valor de numberOfTrusses a 30 cambiando el control deslizante. Muchas vigas de celosía no son muy realistas, pero el vínculo paramétrico funciona. Una vez verificado, establezca el número de vigas de celosía en 15.

Y, como prueba final, al seleccionar la masa en Revit y editar los parÔmetros de ejemplar, podemos cambiar la forma del edificio y comprobar cómo cambia también la viga de celosía. Recuerde que este grÔfico de Dynamo debe estar abierto para ver esta actualización y que el vínculo se romperÔ en cuanto se cierre.

Ejercicio: elementos de DirectShape

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

Abra primero el archivo de ejemplo para esta lección: ARCH-DirectShape-BaseFile.rvt.

  1. En la vista 3D, vemos la masa de construcción de la lección anterior.

  2. A lo largo del borde del atrio se encuentra una curva de referencia, la utilizaremos como una curva a la que haremos referencia en Dynamo.

  3. A lo largo del borde opuesto del atrio se encuentra otra curva de referencia a la que tambiƩn haremos referencia en Dynamo.

  1. Para hacer referencia a la geometrĆ­a en Dynamo, utilizaremos Select Model Element para cada miembro en Revit. Seleccione la masa en Revit e importe la geometrĆ­a en Dynamo mediante Element.Faces: la masa deberĆ­a estar visible en la vista preliminar de Dynamo.

  2. Importe una curva de referencia en Dynamo mediante Select Model Element y CurveElement.Curve.

  3. Importe la otra curva de referencia en Dynamo mediante Select Model Element y CurveElement.Curve.

  1. Al alejar la vista y encuadrar a la derecha en el grÔfico de ejemplo, vemos un gran grupo de nodos, que son operaciones geométricas que generan la estructura de cubierta de enrejado visible en la vista preliminar de Dynamo. Estos nodos se generan mediante la función de nodo a código, tal como se describe en la del manual de introducción.

  2. La estructura se rige por tres parƔmetros principales: Desplazamiento diagonal, Contraflecha y Radio.

Al aplicar zoom, se obtiene una vista en primer plano de los parƔmetros de este grƔfico. Podemos ajustarlos para obtener diferentes salidas de geometrƭa.

  1. Al soltar el nodo DirectShape.ByGeometry en el lienzo, vemos que tiene cuatro entradas: geometrĆ­a, categorĆ­a, material y nombre.

  2. La geometría serÔ el sólido creado a partir de la parte de creación de geometría del grÔfico

  3. La entrada de categoría se elige mediante el nodo desplegable Categories. En este caso, utilizaremos "Armazón estructural".

  4. La entrada de material se selecciona a travƩs de la matriz de nodos anterior, aunque puede definirse mƔs simplemente como "Por defecto" en este caso.

Después de ejecutar Dynamo, al volver a Revit, tenemos la geometría importada en la cubierta del proyecto. Se trata de un elemento de armazón estructural en lugar de un modelo genérico. El vínculo paramétrico a Dynamo permanece intacto.

MatemƔticas vectoriales

Los objetos de los diseños computacionales rara vez se crean explícitamente en su posición y forma finales y, con mayor frecuencia, se convierten, se giran y se colocan de cualquier otro modo a partir de la geometría existente. Las matemÔticas vectoriales sirven como una especie de andamiaje geométrico para proporcionar dirección y orientación a la geometría, así como para conceptualizar movimientos a través del espacio 3D sin representación visual.

Como elemento mÔs bÔsico, un vector representa una posición en el espacio 3D y a menudo se considera el punto final de una flecha desde la posición (0, 0, 0) hasta esa posición. Los vectores se pueden crear con el constructor ByCoordinates utilizando la posición X, Y y Z del objeto vectorial que se acaba de crear. Observe que los objetos vectoriales no son objetos geométricos y no aparecen en la ventana de Dynamo. Sin embargo, la información sobre un vector recién creado o modificado se puede imprimir en la ventana de la consola:

Un conjunto de operaciones matemÔticas se define en objetos vectoriales, lo que permite sumar, restar, multiplicar y, en general, desplazar objetos en un espacio 3D, tal y como desplazaría números reales en un espacio unidimensional en una línea numérica.

Adición de vectores

La adición de vectores se define como la suma de los componentes de dos vectores y se puede entender como el vector resultante si las dos flechas de vector de componente se colocan "de la punta a la cola". La adición de vectores se realiza con el método Add y se representa con el diagrama de la izquierda.

Sustracción de vectores

Del mismo modo, se pueden restar dos objetos vectoriales entre sí mediante el método Subtract. La resta de vectores se puede entender como la dirección que va desde el primer vector hasta el segundo.

Multiplicación de vectores

La multiplicación de vectores se puede entender como el desplazamiento del punto final de un vector en su propia dirección mediante un factor de escala especificado.

Normalizar longitud de vector

A menudo, al ajustar la escala de un vector, es deseable que su longitud sea exactamente igual a la cantidad de escala ajustada. Esto se puede conseguir fƔcilmente. Para ello, debe normalizarse primero un vector, en otras palabras, se debe establecer la longitud del vector en un valor exactamente igual a uno.

c sigue apuntando en la misma dirección que a (1, 2, 3), aunque ahora tiene una longitud exactamente igual a 5.

Producto vectorial

Existen dos mƩtodos adicionales en las matemƔticas vectoriales que no tienen equivalentes claros con las matemƔticas unidimensionales: el producto vectorial y el producto escalar. El producto vectorial permite generar un vector ortogonal (a 90 grados) a dos vectores existentes. Por ejemplo, el producto vectorial de los ejes X e Y es el eje Z, aunque los dos vectores de entrada no tienen que ser ortogonales entre sƭ. Un vector de producto vectorial se calcula con el mƩtodo Cross.

Producto escalar

Una función adicional, aunque algo mÔs avanzada, de matemÔticas vectoriales es el producto escalar. El producto escalar entre dos vectores es un número real (no un objeto vectorial) que hace referencia al Ôngulo entre dos vectores, aunque no exactamente. Una de las propiedades útiles de este tipo de producto es que el producto escalar entre dos vectores serÔ 0 solo si son perpendiculares. El producto escalar se calcula con el método Dot.

primer ejercicio
segundo ejercicio
5MB
Revit-Creating.zip
archive
Open
5MB
Revit-Creating-DirectShape.zip
archive
Open
sección de bloque de código
// construct a Vector object
v = Vector.ByCoordinates(1, 2, 3);

s = v.X + " " + v.Y + " " + v.Z;
a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);

// c has value x = 9, y = 6, z = 0
c = a.Add(b);
a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);

// c has value x = 1, y = 4, z = 0
c = a.Subtract(b);
a = Vector.ByCoordinates(4, 4, 0);

// c has value x = 20, y = 20, z = 0
c = a.Scale(5);
a = Vector.ByCoordinates(1, 2, 3);
a_len = a.Length;

// set the a's length equal to 1.0
b = a.Normalized();
c = b.Scale(5);

// len is equal to 5
len = c.Length;
a = Vector.ByCoordinates(1, 0, 1);
b = Vector.ByCoordinates(0, 1, 1);

// c has value x = -1, y = -1, z = 1
c = a.Cross(b);
a = Vector.ByCoordinates(1, 2, 1);
b = Vector.ByCoordinates(5, -8, 4);

// d has value -7
d = a.Dot(b);

Color ARGB (Color.ByARGB)

A,R,G,B

color

Alfa (Color.Alpha)

color

A

Rojo (Color.Red)

color

R

Verde (Color.Green)

color

G

Azul (Color.Blue)

color

B

Componentes (Color.Components)

color

A, R, G, B

Matiz (Color.Hue)

color

Matiz

Saturación (Color.Saturation)

color

Saturación

Brillo (Color.Brightness)

color

Brillo

16KB
Building Blocks of Programs - Color.dyn
Open
238KB
BuildingBlocks of Programs - ColorOnSurface.zip
archive
Open
Lógica
Logo

Importación de Zero-Touch

¿Qué es Zero-Touch?

La importación Zero-Touch hace referencia a un método sencillo para importar bibliotecas C# con solo apuntar y hacer clic. Dynamo leerÔ los métodos públicos de un archivo .dll y los convertirÔ en nodos de Dynamo. Puede utilizar Zero-Touch para desarrollar paquetes y nodos personalizados y para importar bibliotecas externas en el entorno de Dynamo.

  1. Archivos .dll

  2. Nodos de Dynamo

Con Zero-Touch, puede importar una biblioteca que no se haya desarrollado necesariamente para Dynamo y crear un conjunto de nodos nuevos. La función Zero-Touch muestra la mentalidad multiplataforma del proyecto Dynamo.

En esta sección se muestra cómo utilizar Zero-Touch para importar una biblioteca de terceros. Para obtener información sobre el desarrollo de su propia biblioteca Zero-Touch, consulte la pÔgina wiki de Dynamo.

Paquetes de Zero-Touch

Los paquetes de Zero-Touch son un buen complemento para los nodos personalizados definidos por el usuario. En la tabla siguiente se muestran algunos paquetes que utilizan bibliotecas C#. Para obtener información mÔs detallada sobre los paquetes, visite la sección Paquetes del Apéndice.

Logotipo/imagen

Nombre

Caso real: importación de AForge

En este caso real, mostraremos cómo importar la biblioteca externa .dll AForge. AForge es una biblioteca sólida que ofrece una gama de funciones que van desde el procesamiento de imÔgenes hasta la inteligencia artificial. Haremos referencia a la clase de imÔgenes en AForge para realizar algunos ejercicios de procesamiento de imÔgenes a continuación.

Descarguemos primero AForge. En la pÔgina de descarga de AForge, seleccione [Download Installer] (Descargar instalador) y realice la instalación una vez que haya finalizado la descarga.

En Dynamo, cree un archivo nuevo y seleccione Archivo > Importar biblioteca.

A continuación, localice el archivo dll.

  1. En la ventana emergente, vaya a la carpeta de la versión contenida en la ubicación de instalación de AForge. Probablemente se encuentre en una carpeta similar a esta: C:\Program Files (x86)\AForge.NET\Framework\Release.

  2. AForge.Imaging.dll: solo vamos a utilizar este archivo de la biblioteca AForge para este caso real. Seleccione este archivo .dll y pulse "Abrir".

Al regresar a Dynamo, deberƭa mostrarse el grupo de nodos AForge aƱadidos a la biblioteca. Ahora tenemos acceso a la biblioteca de imƔgenes AForge desde nuestro programa visual.

Ejercicio 1: detección de borde

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

1MB
ZeroTouchImages.zip
archive
Open

Ahora que se ha importado la biblioteca, empezaremos con un sencillo ejercicio (01-EdgeDetection.dyn). Vamos a llevar a cabo un procesamiento de imagen bÔsico en una imagen de muestra para comprobar cómo se filtra la imagen AForge. Utilizaremos el nodo "Watch Image" para visualizar los resultados y aplicar filtros en Dynamo similares a los de Photoshop

AƱada un nodo File Path al lienzo y seleccione "soapbubbles.jpg" en la carpeta del ejercicio que hemos descargado (crƩdito de la fotografƭa: flickr).

El nodo File Path simplemente proporciona una cadena de la ruta a la imagen que hemos seleccionado. A continuación, se debe convertir en un archivo de imagen que se pueda utilizar en Dynamo.

  1. Utilice File From Path para convertir el elemento de ruta de archivo en una imagen en el entorno de Dynamo.

  2. Conecte el nodo File Path al nodo File.FromPath.

  3. Para convertir este archivo en una imagen, utilizaremos el nodo Image.ReadFromFile.

  4. Por último, veamos el resultado. Suelte un nodo Watch Image en el lienzo y conéctelo a Image.ReadFromFile. Aún no hemos utilizado AForge, pero hemos importado correctamente una imagen en Dynamo.

En AForge.Imaging.AForge.Imaging.Filters (en el menú de navegación), verÔ que hay una amplia gama de filtros disponibles. Vamos a utilizar uno de estos filtros para reducir la saturación de una imagen mediante los valores de umbral.

  1. Coloque tres controles deslizantes en el lienzo, cambie los rangos a entre 0 a 1 y los valores de paso a 0,01.

  2. AƱada el nodo Grayscale.Grayscale al lienzo. Este es un filtro de AForge que aplica un filtro de escala de grises a una imagen. Conecte los tres controles deslizantes del paso 1 a cr, cg y cb. Cambie los controles deslizantes superior e inferior para que tengan un valor de 1 y el control deslizante central para que tenga un valor de 0.

  3. Para aplicar el filtro Grayscale, necesitamos una acción que llevar a cabo en nuestra imagen. Para ello, utilizaremos BaseFilter.Apply. Conecte la imagen a la entrada de imagen y Grayscale.Grayscale a la entrada de baseFilter.

  4. Al conectar un nodo Watch Image, se obtiene una imagen con reducción de saturación.

Podemos controlar cómo se reduce la saturación de esta imagen mediante los valores de umbral de rojo, verde y azul. Estos se definen mediante los datos introducidos en el nodo Grayscale.Grayscale. Observe que la imagen se ve bastante atenuada; esto se debe a que el valor de verde se ha establecido en 0 en el control deslizante.

  1. Cambie los controles deslizantes superior e inferior para que tengan un valor de 0 y el control deslizante central para que tenga un valor de 1. De este modo, obtenemos una imagen con reducción de saturación mÔs legible.

Vamos a utilizar la imagen con reducción de saturación y aplicar otro filtro encima. La imagen con reducción de saturación tiene cierto contraste, por lo que vamos a probar una detección de borde.

  1. AƱada un nodo SobelEdgeDetector.SobelEdgeDetector al lienzo.

  2. Conecte esta opción a BaseUsingCopyPartialFilter.Apply y conecte la imagen con reducción de saturación a la entrada de imagen de este nodo.

  3. El detector de borde Sobel ha resaltado los bordes en una nueva imagen.

Al ampliar, el detector de bordes ha representado los contornos de las burbujas con pĆ­xeles. La biblioteca AForge dispone de herramientas para tomar resultados como este y crear geometrĆ­a de Dynamo. Lo exploraremos en el siguiente ejercicio.

Ejercicio 2: creación de rectÔngulos

Ahora que hemos presentado un procesamiento de imagen bƔsico, vamos a usar una imagen para aplicar la geometrƭa de Dynamo. En un nivel elemental, en este ejercicio pretendemos realizar un "trazado directo" de una imagen mediante AForge y Dynamo. Vamos a realizar una tarea sencilla como es extraer rectƔngulos de una imagen de referencia, pero hay herramientas disponibles en AForge para operaciones mƔs complejas. Trabajaremos con 02-RectangleCreation.dyn, uno de los archivos del ejercicio que hemos descargado.

  1. Con el nodo File Path, desplƔcese hasta grid.jpg en la carpeta del ejercicio.

  2. Conecte la serie de nodos restantes anterior para que se muestre una rejilla paramƩtrica de rumbo.

En este paso, vamos a hacer referencia a los cuadrados blancos de la imagen y convertirlos a la geometría real de Dynamo. AForge tiene muchas herramientas eficaces de visión por ordenador y aquí vamos a usar una de las mÔs importantes para la biblioteca llamada BlobCounter.

  1. Añada un BlobCounter al lienzo; a continuación, necesitamos un método para procesar la imagen (similar a la herramienta BaseFilter.Apply del ejercicio anterior).

Desafortunadamente, el nodo "Process Image" no aparece de inmediato en la biblioteca de Dynamo. Esto se debe a que la función puede no ser visible en el código fuente AForge. Necesitaremos encontrar una solución para esta situación.

  1. Añada un nodo de Python al lienzo y agregue el código siguiente al nodo de Python. Este código importa la biblioteca AForge y, a continuación, procesa la imagen importada.

import sys
import clr
clr.AddReference('AForge.Imaging')
from AForge.Imaging import *

bc= BlobCounter()
bc.ProcessImage(IN[0])
OUT=bc

Al conectar la salida de imagen a la entrada del nodo de Python, se obtiene un resultado AForge.Imaging.BlobCounter del nodo de Python.

Los siguientes pasos contienen ciertos procedimientos que permiten familiarizarse con la API de creación de imÔgenes AForge. No es necesario aprender todo esto para trabajar con Dynamo. Esta es mÔs bien una demostración de cómo trabajar con bibliotecas externas dentro de la flexibilidad del entorno de Dynamo.

  1. Conecte la salida de la secuencia de comandos de Python a BlobCounterBase.GetObjectRectangles. Este elemento lee objetos de una imagen basƔndose en un valor de umbral y extrae rectƔngulos cuantificados del espacio de pƭxeles.

  1. Añada otro nodo de Python al lienzo, conéctelo a GetObjectRectangles e introduzca el código siguiente. De este modo, se crearÔ una lista organizada de objetos de Dynamo.

OUT = []
for rec in IN[0]:
	subOUT=[]
	subOUT.append(rec.X)
	subOUT.append(rec.Y)
	subOUT.append(rec.Width)
	subOUT.append(rec.Height)
	OUT.append(subOUT)
  1. Transponga la salida del nodo de Python desde el paso anterior. Se crean cuatro listas, cada una de las cuales representa los valores X, Y, anchura y altura para cada rectƔngulo.

  2. Mediante el nodo Code Block, se organizan los datos en una estructura que acompaña al nodo Rectangle.ByCornerPoints (el código siguiente).

recData;
x0=List.GetItemAtIndex(recData,0);
y0=List.GetItemAtIndex(recData,1);
width=List.GetItemAtIndex(recData,2);
height=List.GetItemAtIndex(recData,3);
x1=x0+width;y1=y0+height;
p0=Autodesk.Point.ByCoordinates(x0,y0);
p1=Autodesk.Point.ByCoordinates(x0,y1);
p2=Autodesk.Point.ByCoordinates(x1,y1);
p3=Autodesk.Point.ByCoordinates(x1,y0);

Disponemos de una matriz de rectÔngulos que representan los cuadrados blancos de la imagen. A través de la programación, hemos realizado una acción a grandes rasgos similar a un trazado directo en Illustrator.

Sin embargo, aún necesitamos realizar una limpieza. Al ampliar, podemos ver que hay un puñado de pequeños rectÔngulos no deseados.

A continuación, vamos a escribir códigos para eliminar los rectÔngulos no deseados.

  1. Inserte un nodo de Python entre el nodo GetObjectRectangles y otro nodo de Python. El código del nodo es el siguiente y elimina todos los rectÔngulos que estÔn por debajo de un tamaño determinado.

rectangles=IN[0]
OUT=[]
for rec in rectangles:
 if rec.Width>8 and rec.Height>8:
  OUT.append(rec)

Con los rectƔngulos superfluos eliminados, solo por probar, vamos a crear una superficie a partir de estos rectƔngulos y extruirlos una distancia basada en sus Ɣreas.

Por último, cambie el valor de both_sides a falso (false) y se obtendrÔ una extrusión en una dirección. Bañe este objeto en resina y obtendrÔ una mesa muy peculiar.

Estos son ejemplos bÔsicos, pero los conceptos descritos aquí son transferibles a aplicaciones apasionantes en el mundo real. La visión por ordenador se puede utilizar para multitud de procesos. Por nombrar algunos: lectores de código de barras, coincidencia de perspectivas, mapeado de proyección y realidad aumentada. Para consultar temas mÔs avanzados de AForge relacionados con este ejercicio, consulte este artículo.

Nodos de Python

¿Por qué habría que utilizar la programación textual en el entorno de programación visual de Dynamo? La programación visual tiene muchas ventajas. Permite crear programas sin necesidad de aprender sintaxis especial en una interfaz visual intuitiva. Sin embargo, un programa visual se puede sobrecargar y, a veces, su funcionalidad puede ser reducida. Por ejemplo, Python ofrece métodos mucho mÔs eficaces para escribir instrucciones condicionales (if/then) y bucles. Python es una potente herramienta que permite ampliar las funciones de Dynamo y reemplazar muchos nodos por unas pocas líneas de código concisas.

Programa visual:

Programa textual:

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

solid = IN[0]
seed = IN[1]
xCount = IN[2]
yCount = IN[3]

solids = []

yDist = solid.BoundingBox.MaxPoint.Y-solid.BoundingBox.MinPoint.Y
xDist = solid.BoundingBox.MaxPoint.X-solid.BoundingBox.MinPoint.X

for i in xRange:
	for j in yRange:
		fromCoord = solid.ContextCoordinateSystem
		toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin,Vector.ByCoordinates(0,0,1),(90*(i+j%val)))
		vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
		toCoord = toCoord.Translate(vec)
		solids.append(solid.Transform(fromCoord,toCoord))

OUT = solids

El nodo de Python

Al igual que los bloques de código, los nodos de Python son una interfaz de secuencias de comandos dentro de un entorno de programación visual. El nodo de Python se encuentra en la biblioteca, en Secuencias de comandos > Editor > Secuencia de comandos de Python.

Al hacer doble clic en el nodo, se abre el editor de secuencias de comandos de Python (también puede hacer clic con el botón derecho en el nodo y seleccionar Editar). ObservarÔ que aparece texto modelo en la parte superior como ayuda para hacer referencia a las bibliotecas necesarias. Las entradas se almacenan en la matriz IN. Los valores se devuelven a Dynamo asignÔndolos a la variable OUT.

La biblioteca Autodesk.DesignScript.Geometry permite utilizar la notación de puntos como ocurre con los bloques de código. Para obtener mÔs información sobre la sintaxis de Dynamo, consulte https://github.com/DynamoDS/DynamoPrimerNew/blob/master-esp/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md y la Guía de DesignScript (Para descargar este documento PDF, haga clic con el botón derecho en el vínculo y seleccione "Guardar vínculo como"). Al escribir un tipo de geometría como, por ejemplo, "Point.", se muestra una lista de métodos para crear y consultar puntos.

Los mƩtodos incluyen constructores como ByCoordinates, acciones como Add y consultas como las coordenadas X, Y y Z.

Ejercicio: nodo personalizado con secuencia de comandos de Python para crear patrones a partir de un módulo sólido

Parte I: configurar la secuencia de comandos de Python

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

35KB
Python_Custom-Node.dyn
Open

En este ejemplo, vamos a escribir una secuencia de comandos de Python que crea patrones a partir de un módulo sólido y lo vamos a convertir en un nodo personalizado. Vamos a crear primero nuestro módulo sólido mediante nodos de Dynamo.

  1. Rectangle.ByWidthLength: cree un rectÔngulo que serÔ la base del sólido.

  2. Surface.ByPatch: conecte el rectƔngulo con la entrada "closedCurve" para crear la superficie inferior.

  1. Geometry.Translate: conecte el rectÔngulo a la entrada "geometry" para desplazarlo hacia arriba y utilice un bloque de código para especificar el grosor de base del sólido.

  2. Polygon.Points: consulte el rectƔngulo trasladado para extraer los puntos de esquina.

  3. Geometry.Translate: utilice un bloque de código para crear una lista de cuatro valores correspondientes a los cuatro puntos y traslade una esquina del sólido hacia arriba.

  4. Polygon.ByPoints: utilice los puntos trasladados para reconstruir el polĆ­gono superior.

  5. Surface.ByPatch: conecte el polĆ­gono para crear la superficie superior.

Ahora que tenemos las superficies superior e inferior, solevaremos los dos perfiles para crear los lados del sólido.

  1. List.Create: conecte el rectƔngulo inferior y el polƭgono superior a las entradas de ƭndice.

  2. Surface.ByLoft: soleve los dos perfiles para crear los lados del sólido.

  3. List.Create: conecte las superficies superior, lateral e inferior a las entradas de Ć­ndice para crear una lista de superficies.

  4. Solid.ByJoinedSurfaces: una las superficies para crear el módulo sólido.

Ahora que ya tenemos el sólido, soltaremos un nodo de secuencia de comandos de Python en el espacio de trabajo.

  1. Para aƱadir entradas adicionales al nodo, haga clic en el icono + del nodo. Las entradas se denominan IN[0], IN[1] y asƭ sucesivamente para indicar que representan elementos de una lista.

Empezaremos definiendo las entradas y la salida. Haga doble clic en el nodo para abrir el editor de Python. Siga el código mostrado a continuación para modificarlo en el editor.

# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []

# Place your code below this line


# Assign your output to the OUT variable.
OUT = solids

Este código cobrarÔ mÔs sentido a medida que avancemos en el ejercicio. A continuación, debemos pensar en qué información se requiere para disponer la matriz de nuestro módulo sólido. En primer lugar, es necesario conocer las dimensiones del sólido para determinar la distancia de traslación. Debido a un error del cuadro delimitador, tendremos que utilizar la geometría de curva de borde para crear un cuadro delimitador.

Eche un vistazo al nodo de Python en Dynamo. Observe que estamos utilizando la misma sintaxis que vemos en los títulos de los nodos de Dynamo. Eche un vistazo al código comentado que aparece a continuación.

# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []

# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
    crvs.append(edge.CurveGeometry)

#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)

#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X

# Assign your output to the OUT variable.
OUT = solids

Ya que vamos a trasladar y girar los módulos sólidos, vamos a utilizar la operación Geometry.Transform. Al observar el nodo Geometry.Transform, vemos que vamos a necesitar un sistema de coordenadas de origen y un sistema de coordenadas de destino para transformar el sólido. El origen es el sistema de coordenadas de contexto del sólido, mientras que el destino serÔ un sistema de coordenadas diferente para cada módulo de matriz. Esto significa que tendremos que crear un bucle a través de los valores de X e Y para transformar el sistema de coordenadas de forma diferente en cada caso.

# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []

# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
    crvs.append(edge.CurveGeometry)

#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)

#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X

#Get the source coordinate system
fromCoord = solid.ContextCoordinateSystem

#Loop through x and y
for i in range(xCount):
    for j in range(yCount):
        #Rotate and translate the coordinate system
        toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin, Vector.ByCoordinates(0,0,1), (90*(i+j%seed)))
        vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
        toCoord = toCoord.Translate(vec)
        #Transform the solid from the source coord syste, to the target coord system and append to the list
        solids.append(solid.Transform(fromCoord,toCoord))

# Assign your output to the OUT variable.
OUT = solids

Haga clic en Ejecutar y, a continuación, guarde el código. Conecte el nodo de Python con la secuencia de comandos existente como se indica a continuación.

  1. Conecte la salida de Solid.ByJoinedSurfaces como la primera entrada para el nodo de Python y utilice un bloque de código para definir las demÔs entradas.

  2. Cree un nodo Topology.Edges y utilice la salida del nodo de Python como entrada.

  3. Por Ćŗltimo, cree un nodo Edge.CurveGeometry y utilice la salida de Topology.Edges como entrada.

Pruebe a cambiar el valor de semilla para crear patrones diferentes. También puede cambiar los parÔmetros del módulo sólido para obtener distintos efectos.

Parte II: convertir el nodo de la secuencia de comandos de Python en un nodo personalizado

Ahora que hemos creado una secuencia de comandos de Python útil, vamos a guardarla como un nodo personalizado. Seleccione el nodo de la secuencia de comandos de Python, haga clic con el botón derecho en el espacio de trabajo y seleccione "Crear nodo personalizado".

Asigne un nombre, una descripción y una categoría.

Se abrirĆ” un nuevo espacio de trabajo en el que se puede editar el nodo personalizado.

  1. Inputs: cambie los nombres de las entradas para que sean mƔs descriptivos y aƱada tipos de datos y valores por defecto.

  2. Output: cambie el nodo de la salida.

Guarde el nodo como un archivo .dyf; deberĆ­a ver que el nodo personalizado refleja los cambios que acabamos de realizar.

Python y Civil 3D

Aunque Dynamo es extremadamente eficaz como herramienta de , también es posible ir mÔs allÔ de los nodos y los cables, y escribir código en forma de texto. Existen dos formas de hacerlo:

  1. Escribir DesignScript mediante un bloque de código

  2. Escribir Python mediante un nodo de Python

Esta sección se centrarÔ en cómo aprovechar Python en el entorno de Civil 3D para sacar partido de las API de .NET de AutoCAD y Civil 3D.

Consulte la sección para obtener información sobre cómo usar Python en Dynamo.

Documentación de las API

Tanto AutoCAD como Civil 3D disponen de varias API que permiten a desarrolladores como usted ampliar el producto principal con funciones personalizadas. En el contexto de Dynamo, lo pertinente son las API de .NET administrado. Los siguientes vĆ­nculos son esenciales para conocer la estructura de las API y su funcionamiento.

A medida que avance por esta sección, es posible que haya algunos conceptos con los que no esté familiarizado, como bases de datos, transacciones, métodos, propiedades, etc. Muchos de estos conceptos son fundamentales para trabajar con las API de .NET y no son específicos de Dynamo o Python. EstÔ fuera del alcance de esta sección del manual abordar estos temas en detalle, por lo que se recomienda consultar con frecuencia los vínculos anteriores para obtener mÔs información.

Plantilla de código

Al editar por primera vez un nuevo nodo de Python, este se rellenarÔ previamente con el código de la plantilla para que pueda empezar. A continuación, se muestra un desglose de la plantilla con explicaciones sobre cada bloque.

  1. Importa los módulos sys y clr, que son necesarios para que el intérprete de Python funcione correctamente. En concreto, el módulo clr permite que los espacios de nombres de .NET se traten bÔsicamente como paquetes de Python.

  2. Carga los ensamblajes estƔndar (es decir, los archivos DLL) para trabajar con las API de .NET administrado para AutoCAD y Civil 3D.

  3. AƱade referencias a espacios de nombres estƔndar de AutoCAD y Civil 3D. Equivalen a las directivas using o Imports de C# o VB.NET (respectivamente).

  4. Se puede acceder a los puertos de entrada del nodo mediante una lista predefinida denominada IN. Puede acceder a los datos de un puerto especĆ­fico mediante su nĆŗmero de Ć­ndice como, por ejemplo, dataInFirstPort = IN[0].

  5. Obtiene el documento y el editor activos.

  6. Bloquea el documento e inicia una transacción de base de datos.

  7. Aquí debe colocar la mayor parte de la lógica de la secuencia de comandos.

  8. Anule los comentarios de esta línea para confirmar la transacción una vez que haya terminado el trabajo principal.

  9. Si desea generar datos del nodo, asĆ­gnelo a la variable OUT al final de la secuencia de comandos.

ĀæDesea personalizar la plantilla? Puede modificar la plantilla de Python por defecto. Para ello, edite el archivo PythonTemplate.py ubicado en C:\ProgramData\Autodesk\C3D <version>\Dynamo.

Ejemplo

Veamos un ejemplo para mostrar algunos de los conceptos bƔsicos de la escritura de secuencias de comandos de Python en Dynamo for Civil 3D.

Objetivo

šŸŽÆ Obtenga la geometrĆ­a de contorno de todas las cuencas vertientes de un dibujo.

Conjunto de datos

A continuación, encontrarÔ archivos de ejemplo que puede consultar para este ejercicio.

Descripción general de la solución

A continuación, se ofrece una descripción general de la lógica de este grÔfico.

  1. Consultar la documentación de la API de Civil 3D

  2. Seleccionar todas las cuencas vertientes del documento por nombre de capa

  3. "Desenvolver" los objetos de Dynamo para acceder a los miembros internos de la API de Civil 3D

  4. Crear puntos de Dynamo a partir de puntos de AutoCAD

  5. Crear PolyCurves a partir de los puntos

”Empecemos!

Consultar la documentación de la API

Antes de empezar a crear el grÔfico y escribir el código, conviene echar un vistazo a la documentación de la API de Civil 3D y hacerse una idea de lo que esta pone a nuestra disposición. En este caso, hay una que devolverÔ los puntos de contorno de la cuenca vertiente. Tenga en cuenta que esta propiedad devuelve un objeto Point3dCollection, que Dynamo desconoce cómo utilizar. En otras palabras, no podremos crear una PolyCurve a partir de un objeto Point3dCollection, por lo que al final tendremos que convertirlo todo en puntos de Dynamo. Ya abordaremos este tema mÔs adelante.

Obtener todas las cuencas vertientes

Ahora podemos empezar a crear la lógica del grÔfico. Lo primero que hay que hacer es obtener una lista de todas las cuencas vertientes del documento. Hay nodos disponibles para ello, por lo que no necesitamos incluirla en la secuencia de comandos de Python. El uso de nodos proporciona una mejor visibilidad para otra persona que pueda leer el grÔfico (en lugar de incluir mucho código en una secuencia de comandos de Python), y, ademÔs, mantiene la secuencia de comandos de Python centrada en un único objetivo, devolver los puntos límite de las cuencas vertientes.

Observe que la salida del nodo All Objects on Layer es una lista de CivilObjects. Esto se debe a que Dynamo for Civil 3D no dispone actualmente de ningún nodo que permita trabajar con cuencas vertientes, que es el motivo por el que necesitamos acceder a la API a través de Python.

Desenvoltura de objetos

Antes de continuar, debemos abordar brevemente un concepto importante. En la sección , se ha explicado cómo se relacionan los objetos y CivilObjects. Para añadir algo mÔs de detalle, un objeto de Dynamo es una envoltura alrededor de una entidad de AutoCAD. De forma similar, un CivilObject de Dynamo es una envoltura alrededor de una entidad de Civil 3D. Puede "desenvolver" un objeto. Para ello, acceda a sus propiedades InternalDBObject o InternalObjectId.

Tipo de Dynamo
Envolturas

Por regla general, es mÔs seguro obtener el ID de objeto mediante la propiedad `InternalObjectId` y, a continuación, acceder al objeto envuelto en una transacción. Esto se debe a que la propiedad `InternalDBObject` devolverÔ un DBObject de AutoCAD que no se encuentra en estado de escritura.

Secuencia de comandos de Python

A continuación, se muestra la secuencia de comandos completa de Python que realiza el trabajo de acceder a los objetos de cuenca vertiente internos para obtener sus puntos de contorno. Las líneas resaltadas representan las que se han modificado o añadido a partir del código de plantilla por defecto.

Haga clic en el texto subrayado en la secuencia de comandos para obtener una explicación de cada línea.

Como regla general, es recomendable incluir la mayor parte de la lógica de la secuencia de comandos en una transacción. De este modo, se garantiza un acceso seguro a los objetos que la secuencia de comandos estÔ leyendo o escribiendo. En muchos casos, omitir una transacción puede provocar un error grave.

Crear PolyCurves

En esta fase, la secuencia de comandos de Python debería generar una lista de puntos de Dynamo que se pueden ver en la vista preliminar en segundo plano. El último paso consiste en crear simplemente PolyCurves a partir de los puntos. Tenga en cuenta que esto también podría hacerse directamente en la secuencia de comandos de Python, pero lo hemos puesto intencionadamente fuera de ella en un nodo para que resulte mÔs visible. Este es el aspecto del grÔfico final.

Resultado

Y esta es la geometrĆ­a final de Dynamo.

šŸŽ‰ Ā”Misión cumplida!

Comparación de IronPython y CPython

Apenas una nota rÔpida aquí antes de terminar. En función de la versión de Civil 3D que esté utilizando, es posible que el nodo de Python se haya configurado de forma diferente. En Civil 3D 2020 y 2021, Dynamo utilizaba una herramienta denominada IronPython para desplazar datos entre objetos .NET y secuencias de comandos de Python. Sin embargo, en Civil 3D 2022, Dynamo realizó la transición al intérprete nativo de Python estÔndar (también conocido como CPython) que utiliza Python 3. Las ventajas de esta transición incluyen el acceso a las bibliotecas modernas mÔs conocidas y a las nuevas funciones de la plataforma, el mantenimiento esencial y los parches de seguridad.

Puede obtener mÔs información sobre esta transición y sobre cómo actualizar las secuencias de comandos existentes en el . Si desea seguir utilizando IronPython, solo tendrÔ que instalar el paquete de DynamoIronPython2.7 mediante Dynamo Package Manager.

Logo

Objeto Autodesk.AutoCAD.DynamoNodes.Object

Entidad Autodesk.AutoCAD.DatabaseServices.Entity

CivilObject Autodesk.Civil.DynamoNodes.CivilObject

Entidad Autodesk.Civil.DatabaseServices.Entity

# Cargar las bibliotecas de normas y DesignScript de Python
import sys
import clr

# AƱadir ensamblajes para AutoCAD y Civil 3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')

clr.AddReference('ProtoGeometry')

# Importar referencias de AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *

# Importar referencias de Civil 3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *

from Autodesk.DesignScript.Geometry import Point as DynPoint

# Las entradas de este nodo se almacenarƔn como una lista en las variables IN.
objs = IN[0]

output = [] 

if objs is None:
    sys.exit("La entrada es nula o estĆ” vacĆ­a.")

if not isinstance(objs, list):
    objs = [objs]
    
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor

with adoc.LockDocument():
    with adoc.Database as db:
        
        with db.TransactionManager.StartTransaction() as t:
            for obj in objs:              
                id = obj.InternalObjectId
                aeccObj = t.GetObject(id, OpenMode.ForRead)                
                if isinstance(aeccObj, Catchment):
                    catchment = aeccObj
                    acPnts = catchment.BoundaryPolyline3d                    
                    dynPnts = []
                    for acPnt in acPnts:
                        pnt = DynPoint.ByCoordinates(acPnt.X, acPnt.Y, acPnt.Z)
                        dynPnts.append(pnt)
                    output.append(dynPnts)
            
            # Validar antes de finalizar la transacción
            t.Commit()
            pass
            
# Asigne la salida a la variable OUT.
OUT = output
programación visual
Python
Manual para desarrolladores de las API de .NET de AutoCAD
Manual de referencia de las API de .NET de AutoCAD
Manual para desarrolladores de las API de .NET de Civil 3D
Manual de referencia de las API de .NET de Civil 3D
15KB
Python_Catchments.dyn
Open
961KB
Python_Catchments.dwg
Open
propiedad de la clase Catchment
Biblioteca de nodos
blog de Dynamo
La plantilla de Python por defecto en Civil 3D
Obtener todas las cuencas vertientes del documento por capas
El grƔfico final
Las PolyCurves de Dynamo resultantes para los contornos de cuenca vertiente
Kit de herramientas de malla
Dynamo Unfold
Rhynamo
Optimo

Listas de listas

Listas de listas

Añadamos un nivel mÔs a la jerarquía. Si utilizamos la baraja de cartas del ejemplo original y creamos un cuadro que contiene varias barajas, este representa ahora una lista de barajas y cada baraja representa una lista de cartas. Esta es una lista de listas. En esta sección, usaremos la siguiente analogía: el cuadro rojo mostrado a continuación contiene un rollo de monedas y cada rollo contiene una lista de peniques.

Monedas

FotografĆ­a de Dori.

Consulta

¿Qué consultas se pueden realizar a partir de la lista de listas? Esto permite acceder a las propiedades existentes.

  • ĀæNĆŗmero de tipos de moneda? 2.

  • ĀæValores de tipo de moneda? 0,01 y 0,25 USD.

  • ĀæMaterial de los cuartos de dólar? 75 % de cobre y 25 % de nĆ­quel.

  • ĀæMaterial de los peniques? 97,5 % de zinc y 2,5% de cobre.

Acción

¿Qué acciones se pueden realizar en la lista de listas? Esta acción cambia la lista de listas en función de la operación especificada.

  • Seleccione un montón especĆ­fico de cuartos de dólar o peniques.

  • Seleccione un cuarto de dólar o un penique especĆ­ficos.

  • Reorganice los montones de cuartos de dólar y peniques.

  • Junte los montones.

De nuevo, Dynamo tiene un nodo anƔlogo para cada una de las operaciones anteriores. Como trabajamos con datos abstractos y no con objetos fƭsicos, necesitamos un conjunto de reglas para controlar el desplazamiento hacia arriba y hacia abajo por la jerarquƭa de datos.

Al trabajar con listas de listas, los datos son complejos y se dividen en capas, pero esto ofrece la oportunidad de realizar operaciones paramétricas impresionantes. Vamos a desglosar los conceptos bÔsicos y abordar algunas operaciones mÔs en las lecciones mostradas a continuación.

Ejercicio:

JerarquĆ­a descendente

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

4KB
Top-Down-Hierarchy.dyn
Open

El concepto fundamental que se debe aprender en esta sección: Dynamo trata las listas como objetos en sí mismos. Esta jerarquía descendente se desarrolla teniendo en cuenta la programación orientada a objetos. En lugar de seleccionar subelementos con un comando como List.GetItemAtIndex, Dynamo seleccionarÔ ese índice de la lista principal en la estructura de datos. Y ese elemento puede ser otra lista. Vamos a desglosar esto con una imagen de ejemplo:

descendente
  1. Con el bloque de código, hemos definido dos intervalos: 0..2; 0..3;.

  2. Estos intervalos estƔn conectados a un nodo Point.ByCoordinates con el encaje establecido en "Producto vectorial". De este modo, se crea una rejilla de puntos y tambiƩn se devuelve una lista de listas como salida.

  3. Observe que el nodo Watch proporciona tres listas con cuatro elementos en cada lista.

  4. Cuando se utiliza List.GetItemAtIndex con un Ć­ndice 0, Dynamo selecciona la primera lista y todo su contenido. Es posible que otros programas seleccionen el primer elemento de cada lista de la estructura de datos, pero Dynamo utiliza una jerarquĆ­a descendente al trabajar con los datos.

List.Flatten

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

4KB
Flatten.dyn
Open

Flatten elimina todos los niveles de datos de una estructura de datos. Esto resulta útil cuando las jerarquías de datos no son necesarias para la operación, pero puede resultar peligroso porque elimina información. En el siguiente ejemplo, se muestra el resultado de aplanar una lista de datos.

Ejercicio
  1. Inserte una línea de código para definir un intervalo en el bloque de código: -250..-150..#4;.

  2. Al conectar el bloque de código a la entrada x e y de un nodo Point.ByCoordinates, se establece el encaje como "Producto vectorial" para obtener una rejilla de puntos.

  3. En el nodo Watch, se muestra que tenemos una lista de listas.

  4. Un nodo PolyCurve.ByPoints harĆ” referencia a cada lista y crearĆ” la PolyCurve respectiva. En la vista preliminar de Dynamo, observe que tenemos cuatro PolyCurves que representan cada fila de la rejilla.

Ejercicio
  1. Al insertar un elemento Flatten antes del nodo de PolyCurve, hemos creado una única lista para todos los puntos. El nodo PolyCurve.ByPoints hace referencia a una lista para crear una curva y, como todos los puntos estÔn en una lista, se obtiene una PolyCurve en zigzag que se ejecuta en toda la lista de puntos.

También existen opciones para aplanar niveles aislados de datos. Mediante el nodo List.Flatten, puede definir un número establecido de niveles de datos que aplanar desde la parte superior de la jerarquía. Esta es una herramienta muy útil si tiene problemas con estructuras de datos complejas que no son necesariamente pertinentes para el flujo de trabajo. Otra opción consiste en utilizar el nodo de aplanado como una función en List.Map. A continuación, examinaremos mÔs detalladamente List.Map.

Chop

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

7KB
Chop.dyn
Open

En el modelado paramétrico, también hay ocasiones en las que se desea modificar la estructura de datos en una lista existente. Hay muchos nodos disponibles para ello y el elemento "Chop" es la versión mÔs bÔsica. Con "Chop", se puede dividir una lista en sublistas con un número establecido de elementos.

El comando "Chop" divide listas en función de una longitud de lista determinada. De alguna manera, el efecto de "Chop" es contrario al efecto de "Flatten": en lugar de eliminar una estructura de datos, se añaden nuevos niveles a ella. Es una herramienta útil para operaciones geométricas, como el ejemplo siguiente.

Ejercicio

List.Map

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

6KB
Map.dyn
Open

List.Map/Combine aplica una función establecida a una lista de entradas, pero un nivel hacia abajo en la jerarquía. Las combinaciones son iguales a las asignaciones, excepto que las combinaciones pueden tener varias entradas correspondientes a la entrada de una determinada función.

Nota: Este ejercicio se ha creado con una versión anterior de Dynamo. Gran parte de la funcionalidad de List.Map se ha resuelto con la adición de la función List@Level . Para obtener mÔs información, consulte List@Level a continuación.

Como introducción rÔpida, examinemos el nodo List.Count de una sección anterior.

El nodo List.Count realiza un recuento de todos los elementos de una lista. Utilizaremos esta opción para mostrar cómo funciona List.Map.

  1. Inserte dos líneas de código en el bloque de código: -50..50..#Nx; -50..50..#Ny;.

    Después de escribir este código, el bloque de código crearÔ dos entradas para Nx y Ny.

  2. Con dos controles deslizantes de enteros, defina los valores de Nx y Ny conectÔndolos al bloque de código.

  3. Conecte cada línea del bloque de código a las entradas X e Y respectivas de un nodo Point.ByCoordinates. Haga clic con el botón derecho en el nodo, seleccione "Encaje" y, a continuación, elija "Producto vectorial". Esta acción crea una rejilla de puntos. Como hemos definido el intervalo de -50 a 50, se extiende la rejilla de Dynamo por defecto.

  4. En el nodo Watch, se muestran los puntos creados. Observe la estructura de datos. Hemos creado una lista de listas. Cada lista representa una fila de puntos de la rejilla.

Ejercicio
  1. Enlace un nodo List.Count a la salida del nodo de visualización del paso anterior.

  2. Conecte un nodo Watch a la salida de List.Count.

Observe que el nodo List.Count ofrece el valor 5. Este es igual a la variable "Nx", tal y como se ha definido en el bloque de código. ¿Por qué ocurre eso?

  • En primer lugar, el nodo Point.ByCoordinates utiliza la entrada "x" como entrada principal para crear listas. Si Nx es 5 y Ny es 3, se obtiene una lista de cinco listas, cada una con tres elementos.

  • Como Dynamo trata las listas como objetos en sĆ­ mismos, se aplica un nodo List.Count a la lista principal de la jerarquĆ­a. El resultado es el valor 5 o el nĆŗmero de listas de la lista principal.

Ejercicio
  1. Mediante un nodo List.Map, nos desplazaremos un nivel hacia abajo en la jerarquía y ejecutaremos una "función" en este nivel.

  2. Observe que el nodo List.Count no tiene ninguna entrada. Se utiliza como una función, por lo que el nodo List.Count se aplicarÔ a cada lista individual un nivel hacia abajo en la jerarquía. La entrada en blanco de List.Count corresponde a la entrada de lista de List.Map.

  3. Los resultados de List.Count ahora proporcionan una lista de cinco elementos, cada uno con el valor 3. Esto representa la longitud de cada sublista.

List.Combine

Nota: Este ejercicio se ha creado con una versión anterior de Dynamo. Gran parte de la funcionalidad de List.Combine se ha resuelto con la adición de la función List@Level. Para obtener mÔs información, consulte List@Level a continuación.

En este ejercicio, utilizaremos List.Combine para mostrar cómo se puede utilizar para aplicar una función en listas de objetos independientes.

Configure primero dos listas de puntos.

Ejercicio
  1. Utilice el nodo Sequence para generar 10 valores, cada uno con un incremento de 10 pasos.

  2. Conecte el resultado a la entrada x de un nodo Point.ByCoordinates. De este modo, se crearĆ” una lista de puntos en Dynamo.

  3. AƱada un segundo nodo Point.ByCoordinates al espacio de trabajo; utilice la misma salida de Sequence como entrada x, pero utilice un control deslizante de entero como entrada y establezca su valor en 31 (puede ser cualquier valor siempre que no se solape con el primer conjunto de puntos) para que los dos conjuntos de puntos no se solapen entre sƭ.

A continuación, utilizaremos List.Combine para aplicar una función a los objetos de dos listas independientes. En este caso, serÔ una función de línea de dibujo sencilla.

Ejercicio
  1. AƱada List.Combine al espacio de trabajo y conecte los dos conjuntos de puntos como entrada list0 y list1.

  2. Utilice Line.ByStartPointEndPoint como función de entrada para List.Combine.

Una vez completado, los dos conjuntos de puntos se comprimen o se emparejan mediante una función Line.ByStartPointEndPoint y se devuelven 10 líneas en Dynamo.

Consulte el ejercicio de listas de n dimensiones para ver otro ejemplo de uso de List.Combine.

List@Level

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

17KB
Listatlevel.dyn
Open

Como alternativa a List.Map, la función List@Level permite seleccionar directamente el nivel de lista con el que se desea trabajar justo en el puerto de entrada del nodo. Esta función se puede aplicar a cualquier entrada de un nodo y le permitirÔ acceder a los niveles de las listas de forma mÔs rÔpida y sencilla que con otros métodos. Solo tiene que indicar al nodo el nivel de la lista que desea utilizar como entrada y permitir que el nodo realice el resto.

En este ejercicio, utilizaremos la función List@Level para aislar un nivel específico de datos.

List@Level

Comenzaremos con una rejilla 3D de puntos sencilla.

  1. Como la rejilla se ha creado con un intervalo para X, Y y Z, sabemos que los datos estƔn estructurados con tres capas: una lista X, una lista Y y una lista Z.

  2. Estas capas existen en niveles diferentes. Los niveles se indican en la parte inferior de la burbuja de vista preliminar. Las columnas de niveles de la lista corresponden a los datos de la lista anterior para ayudar a identificar el nivel en el que se va a trabajar.

  3. Los niveles de la lista se organizan en orden inverso, por lo que los datos de nivel inferior siempre se encuentran en "L1". Esto ayudarÔ a garantizar que los grÔficos funcionen según lo planeado, incluso aunque se realicen cambios en niveles superiores.

List@Level
  1. Para utilizar la función List@Level, haga clic en ">". En este menú, verÔ dos casillas de verificación.

  2. Utilizar niveles: permite utilizar la función List@Level. Después de hacer clic en esta opción, podrÔ hacer clic por los niveles de lista de entrada que desee que utilice el nodo, ademÔs de seleccionarlos. Con este menú, puede probar rÔpidamente diferentes opciones de nivel haciendo clic arriba o abajo.

  3. Mantener la estructura de listas: si se ha activado, dispondrÔ de la opción para mantener la estructura de niveles de esa entrada. En ocasiones, es posible que haya organizado deliberadamente los datos en sublistas. Al seleccionar esta opción, puede mantener la organización de listas intacta sin perder información.

Con nuestra sencilla rejilla 3D, podemos acceder a la estructura de listas y visualizarla mediante la activación o la desactivación de los niveles de la lista. Cada combinación de nivel de lista e índice devolverÔ un conjunto de puntos diferente de nuestro conjunto 3D original.

  1. "@L2" en DesignScript nos permite seleccionar Ćŗnicamente la lista en el nivel 2. La lista del nivel 2 con el Ć­ndice 0 incluye solo el primer conjunto de puntos Y y devuelve solo la rejilla XZ.

  2. Si cambiamos el filtro Nivel a "L1", podremos ver todos los elementos del primer nivel de lista. La lista del nivel 1 con el Ć­ndice 0 incluye todos los puntos 3D en una lista plana.

  3. Si intentamos realizar lo mismo para "L3", solo veremos los puntos del tercer nivel de lista. La lista del nivel 3 con el Ć­ndice 0 incluye solo el primer conjunto de puntos Z y devuelve solo la rejilla XY.

  4. Si intentamos realizar lo mismo para "L4", solo veremos los puntos del tercer nivel de lista. La lista del nivel 4 con el Ć­ndice 0 incluye solo el primer conjunto de puntos X y devuelve solo la rejilla YZ.

Aunque este ejemplo específico también se puede crear con List.Map, List@Level simplifica considerablemente la interacción, lo que facilita el acceso a los datos del nodo. Consulte la siguiente comparación entre los métodos List.Map y List@Level:

  1. Aunque ambos métodos nos brindarÔn acceso a los mismos puntos, el método List@Level permite alternar fÔcilmente entre capas de datos dentro de un único nodo

  2. Para acceder a una rejilla de puntos con List.Map, necesitaremos un nodo List.GetItemAtIndex, junto con List.Map. Para cada nivel de lista que descendamos, necesitaremos utilizar un nodo List.Map adicional. Según la complejidad de las listas, esto podría requerir la adición de una gran cantidad de nodos List.Map al grÔfico para acceder al nivel de información adecuado.

  3. En este ejemplo, un nodo List.GetItemAtIndex con un nodo List.Map devuelve el mismo conjunto de puntos con la misma estructura de listas que List.GetItemAtIndex con "@L3" seleccionado.

Transpose

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

6KB
Transpose.dyn
Open

Transpose es una función fundamental al utilizar listas de listas. Al igual que en los programas de hojas de cÔlculo, una transposición intercambia las columnas y las filas de una estructura de datos. Mostraremos esto con una matriz bÔsica a continuación y, en la siguiente sección, demostraremos cómo se puede utilizar una transposición para crear relaciones geométricas.

Transpose

Suprimiremos los nodos List.Count del ejercicio anterior y pasaremos a alguna geometría para ver cómo se estructuraron los datos.

  1. Conecte PolyCurve.ByPoints a la salida del nodo de inspección desde Point.ByCoordinates.

  2. En la salida, se muestran cinco PolyCurves. Podemos ver las curvas en la vista preliminar de Dynamo. El nodo de Dynamo busca una lista de puntos (o, en este caso, una lista de listas de puntos) y crea una única PolyCurve a partir de ellas. BÔsicamente, cada lista se ha convertido en una curva en la estructura de datos.

  1. Un nodo List.Transpose intercambiarÔ todos los elementos con todas las listas de una lista de listas. Esto suena complicado, pero es la misma lógica que la transposición en Microsoft Excel: intercambiar las columnas y las filas en una estructura de datos.

  2. Observe el resultado abstracto: la transposición ha cambiado la estructura de listas de cinco listas con tres elementos cada una a tres listas con cinco elementos cada una.

  3. Observe el resultado geométrico: al utilizar PolyCurve.ByPoints, se obtienen tres PolyCurves en la dirección perpendicular a las curvas originales.

Bloque de código para creación de listas

El modo de bloque de código abreviado utiliza "[]" para definir una lista. Esta es una forma mucho mÔs rÔpida y fluida de crear una lista que con el nodo List.Create. El bloque de código se aborda con mÔs detalle en Bloques de código y DesignScript. Consulte la imagen mostrada a continuación para observar cómo se puede definir una lista con varias expresiones mediante el bloque de código.

Consulta del bloque de código

La abreviatura de bloque de código utiliza "[]" como método rÔpido y sencillo para seleccionar elementos específicos deseados en una estructura de datos compleja. Los bloques de código se describen con mÔs detalle en el capítulo Bloques de código y DesignScript. Consulte la imagen mostrada a continuación para observar cómo se puede consultar una lista con varios tipos de datos con un bloque de código.

Ejercicio: consulta e inserción de datos

Descargue el archivo de ejemplo. Para ello, haga clic en el vĆ­nculo siguiente.

En el ApƩndice, se incluye una lista completa de los archivos de ejemplo.

26KB
ReplaceItems.dyn
Open

En este ejercicio, se utiliza parte de la lógica establecida en el ejercicio anterior para editar una superficie. Nuestro objetivo es intuitivo, pero la navegación por la estructura de datos es mÔs participativa. Deseamos articular una superficie mediante el desplazamiento de un punto de control.

Comience con la cadena de nodos anterior. Vamos a crear una superficie bƔsica que abarque la rejilla de Dynamo por defecto.

  1. Mediante el bloque de código, inserte estas dos líneas de código y conéctelas a las entradas u y v de Surface.PointAtParameter respectivamente: -50..50..#3; -50..50..#5;.

  2. AsegĆŗrese de establecer el encaje de Surface.PointAtParameter en "Producto vectorial".

  3. En el nodo Watch, se muestra que tenemos una lista de tres listas con cinco elementos cada una.

En este paso, deseamos consultar el punto central de la rejilla que hemos creado. Para ello, seleccionaremos el punto medio de la lista central. Tiene sentido, Āæverdad?

  1. Para confirmar que este es el punto adecuado, también podemos hacer clic por los elementos del nodo de visualización para confirmar que se trata del objetivo correcto.

  2. Mediante el bloque de código, escribiremos una línea de código bÔsica para consultar una lista de listas, como se indica a continuación: points[1][2];.

  3. Con Geometry.Translate, desplazaremos el punto seleccionado hacia arriba en la dirección Z en 20 unidades.

  1. Vamos a seleccionar la fila central de puntos con un nodo List.GetItemAtIndex. Nota: Al igual que en un paso anterior, también podemos consultar la lista con un bloque de código mediante una línea de points[1];.

Hasta ahora, hemos consultado correctamente el punto central y lo hemos desplazado hacia arriba. Ahora deseamos insertar de nuevo este punto desplazado en la estructura de datos original.

  1. Deseamos reemplazar primero el elemento de la lista que hemos aislado en un paso anterior.

  2. Con List.ReplaceItemAtIndex, sustituiremos el elemento central mediante el uso de un Ć­ndice "2" con el elemento de reemplazo conectado al punto desplazado (Geometry.Translate).

  3. En la salida, se muestra que hemos introducido el punto desplazado en el elemento central de la lista.

Ahora que hemos modificado la lista, debemos volver a insertarla en la estructura de datos original: la lista de listas.

  1. Siguiendo la misma lógica, utilice List.ReplaceItemAtIndex para reemplazar la lista central por la lista modificada.

  2. Observe que los bloques de código_ _que definen el índice de estos dos nodos son 1 y 2, que coinciden con la consulta original del bloque de código (points[1][2]).

  3. Al seleccionar la lista en el Ć­ndice 1, veremos la estructura de datos resaltada en la vista preliminar de Dynamo. Hemos fusionado correctamente el punto desplazado con la estructura de datos original.

Hay muchas formas de crear una superficie a partir de este conjunto de puntos. En este caso, vamos a crear una superficie mediante la solevación conjunta de curvas.

  1. Cree un nodo NurbsCurve.ByPoints y conecte la nueva estructura de datos para crear tres curvas NURBS.

  1. Conecte Surface.ByLoft a la salida desde NurbsCurve.ByPoints. Ahora tenemos una superficie modificada. Podemos cambiar el valor Z original de la geometría. Realice el traslado y vea cómo se actualiza la geometría.

ƍndice de nodos

Este índice proporciona información adicional sobre todos los nodos utilizados en este manual de introducción, así como sobre otros componentes que pueden resultar útiles. Esto es solo una introducción a algunos de los 500 nodos disponibles en Dynamo.

Mostrar

Color

CREAR

Color.ByARGB Genera un color mediante componentes alfa, rojo, verde y azul.

Color Range Obtiene un color de un degradado de color entre un color inicial y un color final.

ACCIONES

Color.Brightness Obtiene el valor de brillo de este color.

Color.Components Enumera los componentes del color en el orden siguiente: alfa, rojo, verde y azul.

Color.Saturation Obtiene el valor de saturación de este color.

Color.Hue Obtiene el valor de matiz de este color.

CONSULTA

Color.Alpha Busca el componente alfa del color, de 0 a 255.

Color.Blue Busca el componente azul del color, de 0 a 255.

Color.Green Busca el componente verde del color, de 0 a 255.

Color.Red Busca el componente rojo del color, de 0 a 255.

CREAR

GeometryColor.ByGeometryColor Muestra geometrĆ­a mediante un color.

Visualización

ACCIONES

View.Watch Permite visualizar la salida del nodo.

View.Watch 3D Muestra una vista preliminar dinƔmica de la geometrƭa.

Entrada

ACCIONES

Boolean Selección entre un valor "true" (verdadero) y "false" (falso).

Code Block Permite la creación directa de código de DesignScript.

Directory Path Permite seleccionar un directorio del sistema para obtener su ruta.

File Path Permite seleccionar un archivo del sistema para obtener su nombre de archivo.

Integer Slider Un control deslizante que genera valores enteros.

NĆŗmero Crea un nĆŗmero.

Number Slider Un control deslizante que genera valores numƩricos.

Cadena Crea una cadena.

Object.IsNull Determina si el objeto especificado es nulo.

Lista

CREAR

List.Create Crea una nueva lista a partir de las entradas especificadas.

List.Combine Aplica un combinador a cada elemento en dos secuencias

Number Range Crea una secuencia de nĆŗmeros o letras en el intervalo especificado.

Number Sequence Crea una secuencia de nĆŗmeros.

ACCIONES

List.Chop Divide una lista en un conjunto de listas en el que cada una contiene la cantidad especificada de elementos.

List.Count Obtiene el nĆŗmero de elementos almacenados en la lista especificada.

List.Flatten Aplana una lista anidada de listas en función de una determinada cantidad.

List.FilterByBoolMask Filtra una secuencia mediante la bĆŗsqueda de los Ć­ndices correspondientes en una lista independiente de valores booleanos.

List.GetItemAtIndex Devuelve un elemento de la lista especificada que se encuentra en el Ć­ndice indicado.

List.Map Aplica una función a todos los elementos de una lista y genera una lista nueva a partir de los resultados.

List.Reverse Crea una lista con los elementos de la lista especificada, pero en el orden inverso.

List.ReplaceItemAtIndex Sustituye un elemento de la lista especificada que se encuentra en el Ć­ndice indicado.

List.ShiftIndices Desplaza a la derecha los índices de la lista en función de la cantidad especificada.

List.TakeEveryNthItem Recupera elementos de la lista especificada en los índices que son múltiplos del valor especificado y después del desfase indicado.

List.Transpose Intercambia filas y columnas en una lista de listas. Si hay algunas filas mÔs cortas que otras, los valores nulos se insertan como marcadores de posición en la matriz resultante de forma que siempre sean rectangulares.

Lógica

ACCIONES

If Sentencia condicional. Comprueba el valor booleano de la entrada de prueba. Si la entrada de prueba es "true" (verdadera), el resultado genera la entrada "true"; de lo contrario, el resultado genera la entrada "false" (falsa).

MatemƔticas

ACCIONES

Math.Cos Devuelve el coseno de un Ɣngulo.

Math.DegreesToRadians Convierte un Ɣngulo expresado en grados en un Ɣngulo expresado en radianes.

Math.Pow Eleva un nĆŗmero a la potencia especificada.

Math.RadiansToDegrees Convierte un Ɣngulo expresado en radianes en un Ɣngulo expresado en grados.

Math.RemapRange Ajusta el intervalo de una lista de números conservando la relación de distribución.

Math.Sin Calcula el seno de un Ɣngulo.

Map Asigna un valor a un rango de entrada.

String

ACCIONES

String.Concat Concatena varias cadenas y crea una sola cadena.

String.Contains Determina si la cadena indicada contiene la subcadena especificada.

String.Join Concatena varias cadenas en una sola e inserta el separador especificado entre cada una de las cadenas unidas.

String.Split Divide una cadena en una lista de cadenas. Las cadenas de separación especificadas determinan las divisiones.

String.ToNumber Convierte una cadena en un nĆŗmero entero o doble.

GeometrĆ­a

CĆ­rculo

CREAR

Circle.ByCenterPointRadius Crea un cĆ­rculo con punto central y radio en el plano XY universal, con el plano Z universal como normal.

Circle.ByPlaneRadius Crea un cĆ­rculo centrado en el origen de plano de entrada (raĆ­z), que se encuentra en el plano de entrada, con el radio especificado.

CREAR

CoordinateSystem.ByOrigin Crea un CoordinateSystem con origen en el punto de entrada con los ejes X e Y establecidos como los ejes X e Y de SCU.

CoordinateSystem.ByCylindricalCoordinates Crea un CoordinateSystem en los parƔmetros de coordenadas cilƭndricas especificados respecto al sistema de coordenadas especificado.

Ortoedro

CREAR

Cuboid.ByLengths Crea un ortoedro centrado en el origen de SCU con anchura, longitud y altura.

Cuboid.ByLengths (origin)

Crea un ortoedro centrado en el punto de entrada con la anchura, la longitud y la altura especificadas.

Cuboid.ByLengths (coordinateSystem)

Crea un ortoedro centrado en el origen de SCU con anchura, longitud y altura.

Cuboid.ByCorners

Crea un ortoedro que abarca del punto inferior al punto superior.

Cuboid.Length

Devuelve las cotas de entrada del cubo, NO las cotas reales del espacio universal. **

Cuboid.Width

Devuelve las cotas de entrada del cubo, NO las cotas reales del espacio universal. **

Cuboid.Height

Devuelve las cotas de entrada del cubo, NO las cotas reales del espacio universal. **

BoundingBox.ToCuboid

Obtiene el cuadro delimitador como un ortoedro sólido.

**En otras palabras, si crea una longitud de anchura de ortoedro (eje X) de 10 y la transforma en un CoordinateSystem con dos veces la escala en X, la anchura seguirÔ siendo 10. ASM no permite extraer los vértices de un cuerpo en ningún orden predecible, por lo que es imposible determinar las cotas después de una transformación.

Curva

ACCIONES

Curve.Extrude (distance) Extruye una curva en la dirección del vector normal.

Curve.PointAtParameter Obtiene un punto en la curva en el parƔmetro especificado entre StartParameter() y EndParameter().

Modificadores de geometrĆ­a

ACCIONES

Geometry.DistanceTo Obtiene la distancia entre esta geometrĆ­a y otra.

Geometry.Explode Separa elementos compuestos o no separados en sus componentes.

Geometry.ImportFromSAT Lista de geometrĆ­as importadas

Geometry.Rotate (basePlane) Rota un objeto sobre la normal y el origen del plano el nĆŗmero de grados especificado.

Geometry.Translate Traslada cualquier tipo de geometría según la distancia especificada en la dirección indicada.

LĆ­nea

CREAR

Line.ByBestFitThroughPoints Crea una línea que aproxima al mÔximo un diagrama de dispersión de puntos.

Line.ByStartPointDirectionLength Crea una línea recta desde el punto inicial y la extiende la longitud especificada en la dirección del vector.

Line.ByStartPointEndPoint Crea una lĆ­nea recta entre dos puntos de entrada.

Line.ByTangency Crea una lƭnea tangente a la curva de entrada, que se coloca en el parƔmetro de punto de la curva de entrada.

CONSULTA

Line.Direction La dirección de la curva.

NurbsCurve

Crear

NurbsCurve.ByControlPoints Crea una BSplineCurve mediante puntos de control explĆ­citos.

NurbsCurve.ByPoints Crea una BSplineCurve mediante la interpolación entre puntos.

NurbsSurface

Crear

NurbsSurface.ByControlPoints Crea una NurbsSurface mediante el uso de puntos de control explĆ­citos y los grados especificados para U y V.

NurbsSurface.ByPoints Crea una NurbsSurface con los puntos interpolados y los grados especificados para U y V. La superficie resultante atravesarĆ” todos los puntos.

Plano

CREAR

Plane.ByOriginNormal Crea un plano centrado en el punto raĆ­z con el vector normal de entrada.

Plane.XY Crea un plano en el plano XY universal.

Punto

CREAR

Point.ByCartesianCoordinates Genera un punto en el sistema de coordenadas especificado con tres coordenadas cartesianas.

Point.ByCoordinates (2D) Genera un punto en el plano XY con las dos coordenadas cartesianas especificadas. El componente Z es 0.

Point.ByCoordinates (3D) Genera un punto con las tres coordenadas cartesianas especificadas.

Point.Origin Obtiene el punto de origen (0,0,0).

ACCIONES

Point.Add AƱade un vector a un punto. Equivale a Translate (Vector).

CONSULTA

Point.X Obtiene el componente X de un punto.

Point.Y Obtiene el componente Y de un punto.

Point.Z Obtiene el componente Z de un punto.

PolyCurve

CREAR

Polycurve.ByPoints Crea una PolyCurve a partir de una secuencia de líneas que conectan puntos. En una curva cerrada, el último punto debe estar en la misma ubicación que el punto inicial.

RectƔngulo

CREAR

Rectangle.ByWidthLength (plane) Crea un rectƔngulo centrado en la raƭz del plano de entrada con la anchura (longitud del eje X del plano) y la longitud de entrada (longitud del eje Y del plano).

Esfera

CREAR

Sphere.ByCenterPointRadius Crea una esfera sólida centrada en el punto de entrada con el radio especificado.

Superficie

CREAR

Surface.ByLoft Crea una superficie mediante la solevación entre curvas de sección transversal de entrada.

Surface.ByPatch Crea una superficie mediante el relleno del interior de un contorno cerrado definido por curvas de entrada.

ACCIONES

Surface.Offset Desfasa la superficie en la dirección de la normal de superficie en función de la distancia especificada.

Surface.PointAtParameter Devuelve el punto en los parƔmetros U y V especificados.

Surface.Thicken Engrosa la superficie hasta convertirla en un sólido y realiza la extrusión en la dirección de las normales de superficie en ambos lados de la superficie.

UV

CREAR

UV.ByCoordinates Crea un UV a partir de dos dobles.

Vector

CREAR

Vector.ByCoordinates Genera un vector mediante tres coordenadas euclidianas.

Vector.XAxis Obtiene el vector del eje X canónico (1,0,0).

Vector.YAxis Obtiene el vector del eje Y canónico (0,1,0).

Vector.ZAxis Obtiene el vector del eje Z canónico (0,0,1).

ACCIONES

Vector.Normalized Obtiene la versión normalizada de un vector.

CoordinateSystem

CREAR

CoordinateSystem.ByOrigin Crea un CoordinateSystem con origen en el punto de entrada con los ejes X e Y establecidos como los ejes X e Y de SCU.

CoordinateSystem.ByCylindricalCoordinates Crea un CoordinateSystem en los parƔmetros de coordenadas cilƭndricas especificados respecto al sistema de coordenadas especificado.

Operadores

+ Suma

- Resta

* Multiplicación

/ División

% La división modular busca el resto de la primera entrada después la división por la segunda entrada

< Menor que

> Mayor que

== Este operador comprueba la igualdad entre dos valores.