TFG Franciscojavierjimenezcalvo PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 240

Trabajo Fin de Grado

Grado en Ingeniería Aeroespacial

Fundamentos de programación de VBA en Catia V5:


Aplicación al diseño paramétrico de perfiles y alas
NACA de 4 dígitos

Autor: Francisco Javier Jiménez Calvo


Tutora: Cristina Torrecillas Lozano

Equation Chapter 1 Section 1

Depto. de Ingeniería Gráfica


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015
Trabajo Fin de Grado
Grado en Ingeniería Aeroespacial

Fundamentos de programación de VBA en Catia


V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos

Autor:
Francisco Javiér Jiménez Calvo

Tutora:
Cristina Torrecillas Lozano
Contratada Doctora

Depto. de Ingeniería Gráfica


Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Sevilla, 2015

iii
Trabajo Fin de Grado: Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico
de perfiles y alas NACA de 4 dígitos

Autor: Francisco Javier Jiménez Calvo

Tutora: Cristina Torrecillas Lozano

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2015

El Secretario del Tribunal

v
A mis maestros y amigos
A mi familia

vii
Agradecimientos

Me gustaría agradecer en primer lugar a mi tutora del proyecto, Cristina Torrecillas, por darme la oportunidad
de poder realizar este trabajo con ella y por ayudarme durante todo el transcurso del mismo.

En segundo lugar quiero dar las gracias a una gran amiga, María del Carmen Rodríguez Suárez, por aguantar
mis quejas diaramente y darme siempre animos. Gracias por tu ayuda amiga.

Y por último y más importante me gustaría mencionar a mis padres, Silverio y Lola, ya que si no fuese por
ellos, nunca hubiese sido posible llegar a este momento de mi vida. No tengo palabras para agradecer todo lo
que han luchado para poder proporcionarme un futuro. Muchísimas gracias.

Francisco Javier Jiménez Calvo


Sevilla, 2015

ix
Resumen

El contenido del presente proyecto estudia alguno de los posibles campos de aplicación del lenguaje de macros
de Microsoft, Visual Basic for Applications (VBA), al programa de diseño informático asistido por ordenador
CATIA V5. En concreto éste Trabajo Fin de Grado está enfocado en el diseño de una aplicación para recrear
en CATIA perfiles y alas parametrizadas que utilizan la nomenclatura NACA de 4 dígitos.

En primer lugar se realiza una introducción a la familia de perfiles NACA de 4 dígitos y al módulo de diseño
paramétrico Knowledgeware de CATIA. Además, se definirá una descripción detallada del proceso seguido
para conseguir parametrizar los perfiles y las alas.

En segundo lugar, se define qué es el VBA además de explicar cómo se accede desde CATIA V5, el entorno
de éste, el modo en que el usuario puede desarrollar interfaces para ineractuar con el programa así como los
objetos más importantes del módulo Mechanical Design (Sketcher, Part Design, Wireframe and Surface
Design y Knowledgeware) y las herramientas que ofrecen para trabajar.

Posteriormente, se desarrolla el núcleo principal de este trabajo que es el diseño de una aplicación para
elaborar perfiles y alas parametrizadas con nomenclatura NACA de 4 dígitos a partir de diferentes parámetros
que definen la geometría de los perfiles y las alas.

Para terminar, se ofrece el manual de usuario donde se explica a la persona que quiera hacer uso de la
aplicación cómo interactuar con la interfaz para obtener lo que necesite. Además, al ser un diseño
parametrizado, se realiza algunos comentarios sobre el uso después de la aplicación.

xi
Abstract

The contents of this project is studying some of the possible fields of application of macro language Microsoft,
Visual Basic for Applications (VBA), computer design program CATIA V5 computer assisted. In particular
this Final Project is focused on the design of an application to recreate in CATIA profiles and wings
parameterized using NACA 4 digit nomenclature.

In the first time, an introduction is made to the family of 4 digit NACA profiles and parametric design module
of CATIA Knowledgeware. In addition, a detailed description of the process followed for parameterized
profiles and wings will be defined.

In the second time, it defines what is the VBA also explains how it is accessed from CATIA V5, the setting of
this, the way in which the user can develop interfaces to interactuar with the program and the most important
objects of the module Mechanical Design ( Sketcher, Part Design, Wireframe and Surface Design and
Knowledgeware) and tools that offer to work.

After, the core of this work is nothing more nor less than the design of an application for profiling and
parameterized wings NACA 4 digit nomenclature based on different parameters that define the geometry of
the profiles and develops wings.

Finally, the manual where the person who wants to use the issue of how to interact with the interface you need
to get explained is offered. Also, being a parameterized design, some comments on the use after the
application is made.

xiii
Objetivos y alcance

El objetivo del presente proyecto es la interacción y manejo del lenguaje de programación de macros VBA
para desarrollar una aplicación basado en dicha tecnología con la que poder obtener rápidamente en CATIA
V5 perfiles NACA de 4 dígitos parametrizados y alas parametrizadas que usan la nomenclatura NACA de 4
dígitos en sus perfiles.

La idea de este trabajo surgió después de realizar numersos trabajos de diseño de alas en los cuales se requería
el uso tanto de alas sólidas cómo en superfice, ya que dependiendo del estudio que se quería realizar después
del diseño geométrico, se necesitaba de una forma u otra. Además, durante todo el proceso de diseño, la
geometría de las alas se veian continuamente sujetas a modificaciones por lo que se pensó que se podía
implementar una geometría parametrizada para agilizar el trabajo de diseño permitiendo de esta forma realizar
modificaciones en la geometría de forma instantánea.

Así, el alcance de este Trabajo Fin de Grado en Ingeniería Aeroespacial es familiarizarse y controlar tanto las
herramientas de parametrización de CATIA como los conocimientos de programación necesarios para
elaborar esta o cualquier otra aplicación y facilitar a cualquier usuario el acceso al software realizado para
cumplir sus necesidades. De este modo, el alcance del proyecto no es un estudio intensivo de la geometría de
perfiles y alas y tampoco la exploración de las posibles aplicaciones de éste.

xv
Índice general

Agradecimientos ix
Resumen xi
Abstract xiii
Objetivos y alcance xv
Índice general xvii
Índice de tablas xix
Índice de Figuras xxi
Índice de Códigos xxiii
Notación xxv
1 Introducción 1
1.1 Evolución histórica de la nomenclatura NACA de 4 dígitos 1
1.2 Perfiles aerodinámicos con espesor finito: familia NACA de 4 dígitos 2
1.3 Aviones que utilizan la nomenclatura NACA. 5
1.4 CATIA 6
1.5 Módulo Knowledge Advisor de CATIA 7
1.5.1 Entorno 8
1.5.2 Parámetros 9
1.5.3 Fórmulas 11
1.5.4 Reglas 12
1.6 Parametrización de un ala con perfil NACA de 4 dígitos en CATIA 14
2 El entorno de programación VBA en CATIA V5 27
2.1 Visual Basic for Application 27
2.1.1 Entorno 28
2.1.2 Librerías de las macros 28
2.1.3 Macro Recording 29
2.2 Visual Basic Editor 30
2.3 Iniciación a la programación 32
2.3.1 Declaración de estamentos 33
2.3.2 Estamentos 34
2.3.3 Estamentos ejecutables 34
2.3.4 Funciones y subfunciones 34
2.3.5 Estructuras condicionales e iterativas 34
2.3.5.1 Condicionales 34
2.3.5.2 Iterativas 35
2.3.6 Objetos orientados a la programación 36
2.3.7 Cómo definir un objeto 36
2.4 Interfaz con el usuario 37
3 Herramientas de programación de perfiles y alas 41

xvii
3.1 Arranque 41
3.2 SKETCHER 44
3.2.1 Crear un punto 45
3.2.2 Crear una recta 46
3.2.3 Crear un Spline 47
3.3 Restricciones 48
3.3.1 CatCstTypeDistance 50
3.3.2 CatCstTypeOn 50
3.3.3 CatCstTypePerpendicularity 51
3.3.4 CatCstTypeAngle 51
3.3.5 CatCstTypeSymetry 51
3.4 CATPART 52
3.4.1 PARTDESIGN 52
3.4.1.1 Close Surface 56
3.4.1.2 Mirror 56
3.4.1.3 Symmetry 57
3.4.2 WIREFRAME AND SURFACE DESIGN 57
3.4.2.1 Fill 59
3.4.2.2 Multi-sections Surface 60
3.4.2.3 Join 61
3.4.2.4 Symmetry 61
3.5 KNOWLEDGEWARE 62
3.5.1 Parámetros 62
3.5.2 Fórmulas 65
3.5.3 Reglas 66
4 Aplicación: entorno de programación 69
4.1 Parámetros de entrada en los UserForms 71
4.2 Estructura de la Aplicación 72
4.3 Estructura del Código 73
5 Aplicación perfiles y alas con nomenclatura NACA de 4 dígitos: manual de usuario 79
5.1 Uso posterior a la aplicación 81
Conclusiones 83
Bibliografía 85
Glosario 87
ANEXOS 89
ANEXO 1. ACTIVACIÓN DE PARÁMETROS Y RELACIONES EN CATIA 89
ANEXO 2. CÓDIGO PARA DIBUJAR UN PERFIL NACA DE 4 DÍGITOS 92
ANEXO 3. CÓDIGO DE LA ESTRUCTURA PRINCIPAL PARA DIBUJAR UN ALA 126
ANEXO 4. CÓDIGO ALA IZQUIERDA SUPERFICIE 198
ANEXO 5. CÓDIGO ALA DERECHA SUPERFICIE 200
ANEXO 6. CÓDIGO ALAS SUPERFICIES 203
ANEXO 7. CÓDIGO ALA IZQUIERDA SÓLIDA 206
ANEXO 8. CÓDIGO ALA DERECHA SÓLIDA 208
ANEXO 9. CÓDIGO ALAS SÓLIDAS 211
Índice de tablas

Tabla 1. Herramientas del módulo Knowledge Advisor 8


Tabla 2. Conceptos básicos de la programación 33
Tabla 3. Diferencias entre clase y objeto 37
Tabla 4. Opciones de la barra de herramientas 38
Tabla 5. Objetos del módulo Sketcher 45
Tabla 6. Restricciones 49
Tabla 7. Objetos del PartDesign 54
Tabla 8. Herramientas del ShapeFactory 55
Tabla 9. Herramientas del HybridShapefactory 58
Tabla 10. Herramientas de superficie 58
Tabla 11. Estructura jerarquizada del programa 72

xix
Índice de Figuras

Figura 1. Emblema NACA 2


Figura 2. Definición Geométrica Perfil NACA. Referencia [2] 3
Figura 3. Cessna 150 5
Figura 4. Fairchild A-10 6
Figura 5. Herramientas del módulo Knowledge Advisor 8
Figura 6. Orden Formula 9
Figura 7. Cuadro de diálogo orden Formula 10
Figura 8. Rama Parameters 10
Figura 9. Cuadro de edición Constraint Definition 11
Figura 10. Cuadro de edición Formula Editor 11
Figura 11. Cuadro de edición Constraint Definition editado 12
Figura 12. Rama Relations 12
Figura 13. Cuadro de diálogo Rule Editor 13
Figura 14. Cuadro de edición Rule Editor 13
Figura 15. Constraint punto borde de ataque perfil encastre 15
Figura 16. Lineas de referencia perfil encastre 16
Figura 17. Constraints Sketch.1 16
Figura 18. Perfil NACA con incidencia nula 18
Figura 19. Perfin NACA con ángulo de incidencia 19
Figura 20. Vista frontal ala, ángulo de diedro 19
Figura 21. Vista en planta ala, ángulo de flecha 19
Figura 22. Constraint punto borde de ataque perfil punta ala 20
Figura 23. Lineas de referencia del perfil de la punta del ala 20
Figura 24. Estrechamiento 23
Figura 25. Perfiles distintos 23
Figura 26. Incidencia y Torsión 23
Figura 27. Diedro y Flecha 24
Figura 28. Perfiles y línea de borde de ataque 24
Figura 29. Ejemplo resultado final del diseño de un ala cualquiera 25
Figura 30. Acceso a macros 28
Figura 31. Entorno VBA 30

xxi
Figura 32. Ventana Project Explorer (Rojo) y Properties Window (Amarillo) 30
Figura 33. Ventana Object Browser 31
Figura 34. Formulario de trabajo 37
Figura 35. Herramientas de diseño 37
Figura 36. Editor 39
Figura 37. Comandos para hacer funcionar la aplicación 39
Figura 38. Estructura del módulo Sketcher 44
Figura 39. Estructura del módulo PartDesign 53
Figura 40. Estructura interna del PartDocument 54
Figura 41. Icono HybridBody 59
Figura 42. Esquema de parámetros 63
Figura 43. Esquema Relations 65
Figura 44. Vista del módulo Relations en el árbol 67
Figura 45. Rule Editor 68
Figura 46. Interfaz principal del programa 69
Figura 47. Flujo UserForms 70
Figura 48. Parámetros formulario Crear Perfil 71
Figura 49. Parámetros formulario Crear Ala 71
Figura 50. Mensaje de error 72
Figura 51. Ejemplo del resultado final de crear un perfil 73
Figura 52. Resultado de ejecutar el ANEXO 3 74
Figura 53. Ejemplo del resultado final de crear una semiala izquierda 74
Figura 54. Ejemplo del resultado final de crear una semiala derecha 75
Figura 55. Ejemplo del resultado final de crear un ala 76
Figura 56. Diagrama de flujo de la aplicación 78
Figura 57. Interfaz principal de la aplicación 80
Figura 58. Interfaz PerfilesNACA4Digitos 80
Figura 59. Interfaz AlaNACA4Digitos 81
Figura 60. Botón actualizar de CATIA 82
Figura 61. Localización Options 89
Figura 62. Configuración Tree Customization 90
Figura 63. Configuración Part Infrastructure, General 90
Figura 64. Configuración Part Infraestructure, Display 91
Figura 65. Configuración Parameters and Measure 91
Índice de Códigos

Código 1. Cotas en longitud de los puntos del extradós del perfil del encastre 17
Código 2. Cotas en altura de los puntos del extradós del perfil del encastre 17
Código 3. Cotas en longitud de los puntos del intradós del perfil del encastre 18
Código 4. Cotas en altura de los puntos del intradós del perfil del encastre 18
Código 5. Cotas en altura de los puntos del extradós del perfil de la punta del ala 21
Código 6. Cotas en longitud de los puntos del extradós del perfil de la punta del ala 21
Código 7. Cotas en longitud de los puntos del intradós del perfil de la punta del ala 22
Código 8. Cotas en altura de los puntos del intradós del perfil de la punta del ala 22
Código 9. Declaración de estamento 33
Código 10. Estamento 34
Código 11. Estamento ejecutable 34
Código 12. Subfunción 34
Código 13. Estructura condicional 35
Código 14. Estructura For … Next 35
Código 15. Estructura While … Wend 35
Código 16. Estructura Do … Loop 36
Código 17. Arranque de documentos 42
Código 18. Árbol de trabajo 42
Código 19. Sketches 42
Código 20. Vector de coordenadas 43
Código 21. Establecimiento lugar de trabajo 43
Código 22. Objeto Factory 2D 44
Código 23. Creación de un punto 46
Código 24. Creación de una recta 46
Código 25. Linea de construcción 47
Código 26. Creación de un punto de control 47
Código 27. Creación de un spline 48
Código 28 Creación constraints de forma general 48
Código 29. Modo Constraint 49
Código 30. Modo Measurement 49
Código 31. CatCstTypeDistance 50

xxiii
Código 32. CatCstTypeOn 51
Código 33. CatCstTypePerpendicularity 51
Código 34. CatCstTypeAngle 51
Código 35. CatCstTypeSymmetry 52
Código 36. Close Surface 56
Código 37. Mirror 56
Código 38. Symmetry 57
Código 39. Generar un cuerpo híbrido 59
Código 40. Herramienta HybridShapeFill 59
Código 41. Multi-sections Surface 60
Código 42. Unión de dos superficies 61
Código 43. Añadir superfices al Join 61
Código 44. Symmetry 62
Código 45. Parameters 62
Código 46. Creación de parámetros 64
Código 47. Asignación de un valor a un parámetro 64
Código 48. Comprobación del valor de los parámetros 64
Código 49. Relations 65
Código 50. Crear fórmula 66
Código 51. Crear una Rule 67
Código 52. Orden Modify 67
Código 53. Llamada a los UserForms con un CommandButton 70
Código 54. Salir del programa con un CommandButton 70
Notación

L Fuerza de sustentación
α Ángulo de ataque
Posición en el eje horizontal de los puntos del perfil en el extradós
Posición en el eje vertical de los puntos del perfil en el extradós
Posición en el eje horizontal de los puntos del perfil en el intradós
Posición en el eje vertical de los puntos del perfil en el intradós
x Variable independiete en la dirección del eje horizontal que va de 0 a cuerda
t Dos últimos dígitos del perfil NACA partidos por 100
c Cuerda del perfil
m Primer dígito del perfil NACA partido por 100
p Segundo dígito del perfil NACA partido por 10
sen Función seno
cos Función coseno
arctan Función arcotangente
atan Función arcotangente
≤ Menor o igual
<= Menor o igual
≥ Mayor o igual
>= Mayor o igual
** Función exponente

xxv
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
1 alas NACA de 4 dígitos

1 INTRODUCCIÓN

Piensa, cree, sueña y atrévete.


- Walt Disney -

S egún la Real Academia Española (RAE), la palabra ala tiene la siguiente definición:

“Cada una de las partes que a ambos lados del avión presentan al aire una superficie plana y sirven para
sustentar el aparato en vuelo.”

El ala es un elemento estructural de la aeronave que proporciona la fuerza de sustentación, , necesaria para
poder volar (Referencia [1]). Dichas alas, no pueden tener un perfil cualquiera ya que debido a la geometría
del perfil somos capaces de generar la fuerza de sustentación. Aquí es donde entra en juego la nomenclatura
NACA de 4 dígitos que es un tipo de perfil muy usado históricamente y que aún continúa siéndolo.

1.1 Evolución histórica de la nomenclatura NACA de 4 dígitos

Antes de la era de la aerodinámica computacional, la industria aeronáutica dependía de los estudios realizados
por dos agencias a nivel mundial para la selección de perfiles arodinámicos en sus diseños. En el Reino Unido
estaba la RAE (Royal Aircraft Establishment) y en Estados Unidos la institución precursora del desarrollo
racional de perfiles alares denominada NACA (National Advisory Committee for Aeronautics). En la Figura 1
se puede ver el emblema de NACA.

1
2 Introducción

Figura 1. Emblema NACA

Este comité estaba encargado de realizar pruebas y diseños empíricos de perfiles alares. La NACA fue una
agencia federal de Estados Unidos que se fundó el 3 de marzo de 1915 para emprender, fomentar e
institucionalizar las investigaciones aeronáuticas. La agencia se disolvió el 1 de octubre de 1958 para dar paso
a la creación de la NASA (National Aeronautics and Space Administration).

Estas dos instituciones a nivel mundial formalizaron trabajos y estudios en túneles de viento durante el periodo
comprendido entre 1920 y 1960. Como resultado de este trabajo surgió la creación de familias de perfiles
alares y el desarrollo racional de una nomenclatura para la elección de perfiles basado en su aplicación
posterior. El estudio tiene tanta transcendencia e importancia que muchos de los perfiles siguen siendo
utilizados en aeronaves actuales.

Cabe resaltar que antes de 1930 los diseñadores no tenían ningún tipo de herramienta para seleccionar perfiles
alares, por este motivo, el diseño y elección no obedecía a un análisis dimensionado.

Esta situación cambio radicalmente cuando NACA realizó un estudio racional y sistemático para el diseño de
los perfiles alares aeronáuticos. Este estudio se basó en pruebas exhaustivas en túneles de viento para el
análisis de las características y propiedades inherentes de cada perfil alar. El estudio requería de una
nomenclatura efectiva para lograr su clasificación de manera ordenada y detallada con el fin de suministrar al
diseñador una validación completa del perfil alar acorde a su misión. Referencia [2]

Las superficies de sustentación de NACA son todavía utiles en muchas aplicaciones de diseño. Además,
proporciona un medio para obtener una geometría final, que no tiene por que ser NACA, para obtener el
rendimiento deseado en nuestra superficie sustentadora, es decir, como un primer paso y/o paso intermedio
durante el proceso de diseño. Referencia [3]

1.2 Perfiles aerodinámicos con espesor finito: familia NACA de 4 dígitos

NACA decidió generar una nomenclatura para la primera familia de perfiles alares a principios de 1930. La
primera familia de los NACA airfoils se conoce como la familia NACA de 4 dígitos. Esta familia de perfiles
se divide en dos tipos:

1. Perfiles simétricos. La línea media del perfil es una recta que une el borde de ataque con el borde de
salida .

2
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 3

2. Perfiles con curvatura. La línea media del perfil está constituida por dos parábolas entre sí.

La razón de por qué se utilizan perfiles con curvatura es porque el valor de la fuerza de sustentación es mayor
que en el caso de perfiles simétricos para un ángulo de ataque, , dado. Referencia [1]

La línea de curvatura media es la característica más importante del diseño de un perfil alar. Ésta se define
mediante puntos posicionados de forma equidistante entre el extradós y el intradós medidos
perpendicularmente desde la cuerda.

El punto de inicio y el punto de finalización de la línea de curvatura media están definidos como el borde de
ataque y el borde de salida. La línea recta que conecta los puntos anteriores es llamada como la línea de cuerda
del perfil alar y la distancia precisa medida en esta línea se conoce como cuerda. Todas estas características de
las que se habla se pueden ver en la Figura 2. Referencia [3]

Figura 2. Definición Geométrica Perfil NACA. Referencia [2]

El significado de cada uno de los cuatro dígitos que definen un perfil NACA de 4 dígitos empezando por el de
más a la izquierda, utilizando como ejemplo el perfil NACA 6410, es el siguiente (Referencia [1] y [4]):

 El primer dígito, 6, indica la máxima cota de la línea media del perfil en unidades de tanto por ciento
de la cuerda. El valor de este máximo recime el nombre de máxima curvatura del perfil.

 El segundo dígito, 4, indica la posición del punto de máxima curvatura con respecto al borde de
ataque en unidades de decenas de tanto por ciento de la cuerda.

 Los dos últimos dígitos, 10, definen el máximo espesor del perfil en unidades de tanto por ciento de la
cuerda.

Por último, comentar que la distribución del espesor del perfil alar tiene efectos aerodinámicos importantes
relacionados con el coeficiente máximo de sustentación y la capa límite. Al incrementar el espesor, el
coeficiente de sustentación máximo aumenta y si disminuimos el espesor, ocurre el efecto contrario. Además
existe un fenómeno de separación de la capa límite, denominado desprendimiento, asociado al incremento del
espesor, ya que se incrementa el gradiente adverso de presiones que debe soportar el flujo alrededor del
perfil.Por este motivo, es necesario tener en cuenta hasta qué punto es bueno incrementar el espesor del perfil
con el objetivo de incrementar el coeficiente de sustentación máximo y de igual forma minimizar los efectos

3
4 Introducción

de desprendimiento de la capa límite. Referencia [2]

Un perfil NACA de 4 dígitos viene definido por las ecuaciones ( 1) y ( 2):

( 1)

( 2)

Donde es la posición en el eje horizontal de los puntos del perfil en el extradós, es la posición en el eje
vertical de los puntos del perfil en el extradós, es la posición en el eje horizontal de los puntos del perfil en
el intradós, es la posición en el eje vertical de los puntos del perfil en el intradós, es una variable
independiente en la dirección del eje horizontal que va de 0 a la cuerda, que viene dado por la ecuación ( 3),
que viene dado por la ecuación ( 5) e que viene dado por la ecuación ( 4).

( 3)

donde es igual a los dos últimos dígitos del perfil partidos por 100 y es la cuerda.

( 4)

donde m es el primer dígito partido por 100 y p es el segundo dígito partido por 10.

( 5)

Por lo tanto, las expresiones finales que definen un perfil NACA de 4 dígitos son las correspondientes a las
ecuaciones ( 6), ( 7), ( 8) y
( 9).

( 6)

( 7)

4
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 5

( 8)

( 9)

Estas ecuaciones son las que se programan en CATIA haciendo uso del módulo Knowledge Advisor. Dicha
implementación se explicará en apartados posteriores. Referencia [5]

1.3 Aviones que utilizan la nomenclatura NACA.

Muchas de las aeronaves actuales utilizan perfiles alares NACA de todas las familias y divisiones. Estos se han
beneficiado de los estudios realizados en los distintos perfiles alares por NACA donde se pueden encontrar
estudios de perfiles para reducir la resistencia lo máximo posible o para incrementar el coeficiente de
sustentación lo máximo posible entre otros. A modo ilustrativo, a continuación se muestra una serie de
aviones que utilizan la nomenclatura NACA en sus alas (Referencia [2]):

 Cessna 150: utiliza el perfil NACA 2412.

Figura 3. Cessna 150

5
6 Introducción

 Fairchild A-10: utiliza el perfil NACA 6716.

Figura 4. Fairchild A-10

1.4 CATIA

CATIA (Computer-Aided Three dimensional Interactive Application) es mucho más que un software de
diseño, es una herramienta de integración del proceso desarrollo del producto realizado por Dassault Systèmes.
CATIA es la solución líder en todo el mundo para la experiencia y el diseño de productos. Organizaciones
líderes de distintos sectores la utilizan para desarrollar los productos que vemos y usamos en nuestra vida
cotidiana.

Actualmente cuenta con más de ciento cincuenta módulos de las más diversas aplicaciones y ofrece la
posibilidad única no solo de modelar cualquier producto, sino de hacerlo en el contexto de su comportamiento
en la vida real: diseño en la era de la experiencia. Los arquitectos de sistemas, los ingenieros, los diseñadores
y todos sus colaboradores pueden definir el mundo que nos conecta, imaginarlo y darle forma. Con CATIA se
puede diseñar cualquier cosa por muy compleja que pueda ser. Sólo hay que encontrar la mejor forma de
hacerlo. Además, las posibilidades en cuanto a desarrollo paramétrico sorprenden, sin olvidar la extremada
precisión de trabajo, y a pesar de lo complejo que es, su sencillez de uso, se agradece.

CATIA tiene más de 140 módulos o soluciones de proceso. Cada solución engloba un conjunto de
herramientas específicas según la aplicación que se necesite. Y cada solución funciona bajo una licencia de
uso concreta. CATIA es muy potente y ofrece múltiples soluciones que se distribuyen bajo sus
correspondientes licencias de uso. Se basa en la plataforma 3DEXPERIENCE de Dassault Systèmes, ofrece:

 Un entorno de diseño social en una fuente única de autenticidad, al que se accede mediante potentes
paneles en 3D que impulsan la inteligencia empresarial, el diseño simultáneo en tiempo real y la

6
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 7

colaboración de todas las partes interesadas, incluidos los trabajadores.

 3DEXPERIENCE ofrece una experiencia intuitiva con funcionalidades de modelado y simulación en


3D de primer nivel que optimizan la eficacia de todos los usuarios.

 Se trata de una plataforma inclusiva de desarrollo de productos, que resulta fácil de integrar con los
procesos y las herramientas existentes. Esto permite que varias disciplinas aprovechen las eficaces e
integradas aplicaciones especializadas en todas las fases del proceso de desarrollo de los productos.

Las aplicaciones de diseño, ingeniería e ingeniería de sistemas de CATIA constituyen el núcleo de las
soluciones basadas en experiencias de Dassault Systèmes destinadas a cubrir necesidades específicas de cada
sector. Esto supone una revolución en la manera de concebir, desarrollar y hacer realidad productos de las
organizaciones, cuyas innovadoras experiencias del cliente, además, aportan una ventaja frente a la
competencia. Referencia [6] y [7]

1.5 Módulo Knowledge Advisor de CATIA

Tanto para la parametrización de los perfiles NACA de 4 dígitos como de las alas es necesaria la utilización
del módulo Knowledge Advisor de CATIA. Este módulo permite a los usuarios incluir el conocimiento dentro
de un plan de trabajo e influenciar en él para ayudar al diseñador a tomar decisiones en el orden de reducir
errores o automatizar dicho plan, para poder obtener la máxima productividad.

Los usuarios pueden aportar conocimiento en un plan de diseño tales como conductas, fórmulas, reglas y
chequeos y acudir a ellos cuando se requiera en cualquier momento.

Durante la ejecución de este Trabajo Fin de Grado se hizo uso continuamente de fórmulas y reglas para que el
usuario final de la aplicación puediese, una vez ejecutada la aplicación, desentenderse de ésta y realizar todas
las modificaciones que se requieran con tan solo dar un nuevo valor a los párametros de la geometría.

De forma abreviada, el módulo Knowledge Advisor ayuda a:

 Capturar el conocimiento de la ingeniería como especificaciones que permiten dar a la aplicación una
consistencia completa.

 Definir y compartir fácilmente la habilidad de diseño entre todos los usuarios.

 Automatizar la definición del producto.

 Aumentar la productividad.

 Permitir dar una atención temprana a especificaciones del plan de diseño que previenen un costoso
rediseño.

 Guiar y ayudar a los usuarios a través de sus tareas del plan de diseño.

Referencia [8]
7
8 Introducción

1.5.1 Entorno

Dentro del módulo Knowledge Advisor podemos encontrar todas las herramientas que visualizamos en la
Figura 5.

Figura 5. Herramientas del módulo Knowledge Advisor

En la Tabla 1 se detallan las diferentes herramientas así como una breve explicación de para que se utilizan.

Símbolo Etiqueta Descripción

Se utiliza para crear parámetros nuevos y relaciones


Formula
entre ellos.

Proporcionan la capacidad de manejar familias de


Design Table
componentes.

Pregunta designaciones para determinar y preveer


Knowledge Inspector
los resultados al cambiar algunos parámetros.

Permite crear reglas, escribir códigos y textos con


Rule
sintaxis y aplicarlas a nuestro documento.

Al igual que Rule se crean con un código y se


Check
aplican al documento.

Permite crear una escritura específica cómo


Reactions cambiar algún rasgo que atribuye cuando un evento
ocurre.

Permite crear juegos de parámetros. Estos juegos


Add Set of Parameters de parámetros son agrupados debajo del nodo de
los parámetros.

Permite que se lancen unos argumentos de ingenio


Macros with arguments
Donde se ha creado una macro.

Actions Ermite crear una escritura para la macro.

Permite crear una lista de rasgos que se localizará


List bajo el nodo de los parámetros en el árbol de la
especificación.

Tabla 1. Herramientas del módulo Knowledge Advisor

En este Trabajo Fin de Grado solamente utilizaremos las herramientas “Formula” tanto para la creación de
parámetros como de fórmulas y “Rule” para la programación de las fórmulas del perfil NACA de 4 dígitos ya
que dichas fórmulas tienen diferentes casos dependiendo de la posición de la cuerda en la que nos

8
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 9

encontremos.

Se recomienda que antes de empezar a trabajar con estas herramientas se tenga activada la visualización de los
parámetros y las relaciones, si aún no lo está, en el ANEXO 1 viene detallado paso a paso como realizarla. A
conticuación, para una mejor compresión de este módulo, se procede a explicar las diferentes herramientas
utilizadas en la ejecución del Trabajo. Referencia [8]

1.5.2 Parámetros

En CATIA, los parámetros son elementos que define un valor numérico. Estos elementos no son elementos
geométricos, sino un almacenen de valores de diferentes tipos que después pueden ser utilizados en distintas
aplicaciones, es decir, no es más que un dato o valor que se toma para una determinada función y con criterios
específicos.

Por ejemplo, en la antigua Grecia, con solo conocer un parámetro, la longitud de la cabeza de cualquier
individuo, se podría reconstruir el cuerpo entero repetando unos cánones o proporciones observadas, aunque
esto rápidamente fue descartado (por las infinitas diferencias entre cada cuerpo humano).

En la Ingeniería se siguen obteniendo proporciones basadas en análisis físicos y con ellas construyendo
infinidad de cosas. A continuación se va a ver cómo se crea un parámetro.

En primer lugar se debe acceder a la orden Formula de la barra Knowledge, la ubicación de esta barra varia
según el usuario ya que en CATIA cada persona personaliza su entorno de trabajo a su gusto. La orden que
debemos buscar la podemos visualizar en la Figura 6.

Figura 6. Orden Formula

Al pinchar en la orden “Formula” aparece un cuado de diálogo como el de la Figura 7. Una vez desplegado, se
debe realizar tres sencillos pasos para crear un parámetro.

1. Primero: definir el tipo de unidades del parámetro a crear. Esto es importante, ya que los parámetros
se utilizan en combinación con valores de elementos, y estos en general llevan asociadas unas
unidades de trabajo.

2. Se establece el tipo de valores que contendrá, uno o múltiples.

3. Se crea el parámetro con la opción New Parameter of Type.

Los pasos se encuentrar señalizados sobre la Figura 7. Para cambiar el nombre del parámetro, primero hay que
crearlo. Una vez creado, se marca y renombra.

9
10 Introducción

Figura 7. Cuadro de diálogo orden Formula

Una vez creado el parámetro, este se visualizan en el árbol agrupado bajo la rama Parameters. En la Figura 8
se puede ver los párametos utilizados para parametrizar el ala completa usando la nomenclatura NACA de 4
dígitos. Además, podemos observar las unidades de cada parámetro en el caso de que este tenga asignada una.

Referencia [6]

Figura 8. Rama Parameters

10
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 11

1.5.3 Fórmulas

Las fórmulas o también llamadas ecuaciones o relaciones, son una relación que se puede añadir para
sincronizar o relacionar valores o parámetros entre sí, es decir, con ellas se puede llevar diferentes parámetros
a otros nuevos, manteniendo entre ellos no sólo una proporción, sino una ecuación de relación.

En este Trabajo Fin de Grado se han utilazdo fórmulas para que se modifiquen las Constraint, asociando éstas
a uno o varios parámetros, de forma que al modificar algún parámetro, se actualice automáticamente el resto
de la geometría con tan solo un click.

Para crear una fórmula en primer lugar se debe crear una Constraint y una vez creada modificar su valor
editando una fórmula para ello debemos hacer click sobre el botón derecho de nuestro ratón sobre el valor de
la Constraint, desplegándose un menú donde aparecerá dicha opción tal y como se observa en la Figura 9.

Figura 9. Cuadro de edición Constraint Definition

Una vez pinchemos en Edit formula nos aparece un nuevo cuadro de diálogo donde se puede escribir dicha
fórmula. Este cuadro se puede visualizar en la Figura 10.

Hay que tener mucho cuidado cuando creamos una fórmula ya que las unidades de los parámetros que
incluimos deben ser correctas.

Figura 10. Cuadro de edición Formula Editor

11
12 Introducción

Una vez creada la fórmula, ya no se puede escribir ningún valor en el cuadro de edición. Éste queda bloqueado
en función de la relación impuesta. Además, en el área gráfica se indica junto al valor que éste lleva implícita
una fórmula como se observa en la Figura 11.

Figura 11. Cuadro de edición Constraint Definition editado

Por último, mecionar que en el árbol de trabajo se puede ver la relación impuest en la rama Relations tal y
como se observa en la Figura 12. Referencia [6]

Figura 12. Rama Relations

1.5.4 Reglas

Las Rule dan la posibilidad de obligar al modelo que siga unas determinadas pautas. Éstas son
fundamentalmente de dos tipos:

 Agrupaciones de fórmulas: consiguiendo tener un árbol más ordenado y con menos elementos.

 Reglas creadas por el propio usuario con un lenguaje intrínseco de CATIA y que sigue la estructura
de un lenguaje sencillo de programación, VBA.

Normalmente es conveniente crear una Regla cuando tenemos un modelo que va a seguir unas pautas si
cumple unas condiciones, y otras distintas si cumple otras condiciones. Para acciones de más relevancia habría
que crear una Macro que es el objeto de este Trabajo Fin de Grado.

La Macro desarrollada en este trabajo hace uso de la herramienta Rule para incluir las fórmulas que dan lugar
al perfil NACA de 4 dígitos.

Para crear una regla se debe pulsar sobre el icono de Rule, apareciendo de esta forma la ventana que aparece en
la Figura 13.

12
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 13

Figura 13. Cuadro de diálogo Rule Editor

En la ventana Rule Editor podemos ver:

 El nombre de la regla: Rule.1. La primera regla creada en un documento es por defecto Rule.1, este
nombre es el que aparecerá en el árbol a menos que se modifique.

 El usuario y la fecha de creación.

 El destino: una regla puede hacer referencias a especificaciones de fórmulas que lleve agregado el
Part en su raíz o puede incluirse dentro de un nivel más bajo como un Body que esté insertado en el
Part principal.

Si pinchamos en OK se desplegará el cuadro de edición Rule Editor el cual podemos observar en la Figura 14.
En este cuadro es donde se escribe la regla, pudiendo hacer uso de:

 Los Parameters que son los parámetros.

 Las Keywords que son las estructuras básicasde las que disponemos para construir la regla.

 Los Operators que son los operadores boleanos.

Figura 14. Cuadro de edición Rule Editor

Referencia [8]
13
14 Introducción

1.6 Parametrización de un ala con perfil NACA de 4 dígitos en CATIA

En este apartado se va a explicar el procedimiento que se sigue a la hora de parametrizar un perfil NACA de 4
dígitos y una ala que utiliza dichos perfiles. Con esto se pretende dos cosas, que el usuario final o el lector
entienda como afecta cada parámetro sobre la geometría y justificar la decisión de programar dicho
procedimiento.

Para empezar, lo que se debe hacer es crear todos los parámetros que se van a utilizar siguendo el
procedimento explicado en el apartado 1.5.2. Estos son:

1. NACA1: primer dígito del perfil NACA situado en el encastre del ala.

2. NACA2: segundo dígito del perfil NACA situado en el encastre del ala.

3. NACA34: tercer y cuarto dígito del perfil NACA situado en el encastre del ala.

4. NACA1T: primer dígito del perfil NACA situado en la punta del ala.

5. NACA2T: segundo dígito del perfil NACA situado en la punta del ala.

6. NACA34T: tercer y cuarto dígito del perfil NACA situado en la punta del ala.

7. Cuerda: longitud (en milímetros) entre borde de ataque y borde de salida del perfil del encastre del ala.

8. Diedro: ángulo (en grados) que forma la línea de borde de ataque del ala respecto al suelo

9. Incidencia: ángulo (en grados) que forma el perfil del encastre del ala respecto al suelo.

10. Flecha: ángulo (en grados) que forma la línea de borde de ataque del ala respecto a un plano que es
perpendicular al suelo y al plano que contiene la cuerda del perfil del encastre.

11. Semienvergadura: longitud (en milímetros) entre el perfil del encastre y el de la punta del ala.

12. Estrechamiento: tanto por ciento de estrechamiento de la cuerda del perfil de la punta del ala respecto
a la cuerda del perfil del encastre del ala.

13. Torsión: ángulo (en grados) que forma el perfil de la punta del ala respecto al suelo.

Más adelante en este mismo apartado, se visualizará como afecta cada parámetro a la geometría del perfil y/o
ala. Una vez creado todos los párametros, el siguiente paso es dibujar en un Sketch el perfil del encastre. Para
ello, dentro del Sketch se crearán dos líneas de puntos, que serán el extradós y el intradós del perfil las cuales
constarán de 60 puntos en total (sin contar el punto del borde de ataque) para poder representar de manera fiel
el contorno del perfil. Posteriormente, se creará un punto más, el del borde de ataque.

El siguiente paso es definir dos líneas de referencia para poder incluir el ángulo de incidencia del perfil. Para
ello, en primer lugar, se debe acotar el punto creado para el borde de ataque respecto al sistema de referencia
del Sketch. Una vez creada las Constraints se editará una fórmula en cada una de éstas de forma que dicho
punto tenga una distancia en longitud y en altura igual a la semienvergadura tal y como se ve en la Figura 15.

14
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 15

Figura 15. Constraint punto borde de ataque perfil encastre

El motivo de situar el punto del borde de ataque a una longitud y altura igual a la semienvergadura es porque
las cotas en CATIA no entienden de valores negativos. Algunas de las coordenadas de los puntos del perfil
tienen valores negativos en su coordenada vertical y si además le introducimos un ángulo de incidencia al
perfil, puede que también alcancen valores negativos en su coordenada horizontal. Por lo que a la hora de
asignar los valores a las cotas de los puntos del perfil le sumaremos un offset a sus coordenadas para que
siempre sean positivas.

El valor del offset debe ser además alto ya que los puntos de los Sketch siempre deben estar contenidos dentro
del primer cuadrante del sistema de referencia global del Sketch y si no se encuentra lo suficientemente alejado
del eje horizontal y vertical puede que al modificar algún parámetro se sobrepase dicho límite empezando a
salir avisos de error en CATIA. Por este motivo se decide imponer que dicha distancia sea igual a
Semienvergadura en el caso de que estemos diseñando alas e igual a Cuerda si se esta diseñando perfiles ya
que normalmente serán las distancias mas grandes que se manejen en los respectivos casos.

Por último comentar que dicho punto se debe acotar sobre el sistema de referencia global del Sketch el cual
permanece fijo ya que se requiere que el punto del borde de ataque permanezca “fijo” en el espacio ya que a
través de el se define, además de las líneas de referencia a través de las cuales se acotarán el resto de puntos del
perfil, la línea que unirá todos los puntos de los bordes de ataque de todos los perfiles la cual se utiliza como
eje de giro para implementar la incidencia y/o torsión de los perfiles y como guía para la extrusión del ala.

Una vez tengamos el punto del borde de ataque acotado con sus respectivas fórmulas, se procede a crear dos
líneas de construcción las cuales, tal y como se comentó anteriormente, ejercerán la función de sistema de
referencia local para el resto de puntos que conforman el perfil. La primera de ellas tendrá un ángulo igual ál
ángulo de incidencia respecto al eje vertical y además, será coincidente con el punto del borde de ataque; y la
segunda será siempre perpendicular a la primera. Al ser líneas de construcción nos da igual la longitud de las
mismas. En la Figura 16 se puede ver un ejemplo del aspecto final que pueden tener dichas líneas ya que estas
van cambiando al modificar los parámetros que definen el punto del borde de ataque o el ángulo que forma
15
16 Introducción

con la vertical.

Figura 16. Lineas de referencia perfil encastre

A continuación se acotan las distancias de los 60 puntos creados al principio con respecto cada una de las
líneas creadas anteriormente, la primera línea hace de eje vertical y la segunda de horizontal. Al acotar los
puntos se debe seguir una lógica, ya que posteriormente se deben realizar operaciones sobre dichas cotas por lo
que se debe saber el orden de acotación de los puntos en longitud y altitud. El orden utilizado para el presente
proyecto ha sido el siguiente: de la 6 a la 35 las cotas en longitud de los puntos del extradós, de la 36 a la 65 las
cotas en altura de los puntos del extradós, de la 66 a la 95 las cotas en longitud de los puntos del intradós y de
la 96 a la 125 las cotas en altura de los puntos del intradós. Las cotas no empiencan en el número uno debido a
que previamente se han acotado el punto de control y las líneas de referencias tal y como se puede ver en la
Figura 17.

Figura 17. Constraints Sketch.1

16
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 17

Para finalizar el dibujo del perfil, se accede al módulo Knowledge Advisor y creamos una Rule donde se debe
incluir las ecuaciones ( 6), ( 7), ( 8) y

( 9) para sus correspondientes puntos, es decir, las ecuaciones ( 6) y ( 7) para cada punto del extradós y las
ecuaciones ( 8) y

( 9) para cada punto del intradós.

Antes de ponerse a escribir las ecuaciones en el Rule Editor hay que tener en cuenta que en CATIA, la sintaxis
de la sentecia condicional es : If {condición} {instrucciones} else {instrucciones}, y que la potencia se escribe
como **.

La línea de código que se debe implementar para las cotas de la 6 a la 35 es la del Código 1, para las cotas de
la 36 a la 65 la del Código 2, para las cotas de la 66 a la 95 la del Código 3 y para las cotas de la 96 a la 125 la
del Código 4. Como se ha mencionado antes, dichas líneas se deben repetir para todas las cotas por lo que se
deberá cambiar el número de la cota, es decir, del offset. Además, la coordenada x debe ir de 20 a 1000 la cual
esta adimensionalizada con la cuerda de forma que x/1000*Cuerda va de 20/1000*Cuerda hasta
1000/1000*Cuerda. Se debe dividir los elementos por 1000 ya que las unidades de los parámetros tipo variable
real están en el SI y las cotas en milímetros.

if (x/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.6\Offset = (x/1000*Cuerda -


NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(x/1000)-0.1260*(x/1000)-
0.3516*(x/1000)**2+0.2843*(x/1000)**3-
0.1015*(x/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(x/1000))))) else
PartBody\Sketch.1\Offset.6\Offset = (x/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(x/1000)-0.1260*(x/1000)-
0.3516*(x/1000)**2+0.2843*(x/1000)**3-0.1015*(x/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(x/1000)))))

Código 1. Cotas en longitud de los puntos del extradós del perfil del encastre

if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.36\Offset =


(Semienvergadura+((NACA1/100)*(20/1000*Cuerda)*(2*(NACA2/10)-
20/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.36\Offset = (Semienvergadura+((NACA1/100)*(Cuerda-20/1000*Cuerda)*(-
2*(NACA2/10)+20/1000+1)/(1-NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.1260*(20/1000)-0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1-(NACA2/10))**2)*((NACA2/10)-(20/1000)))))

Código 2. Cotas en altura de los puntos del extradós del perfil del encastre

17
18 Introducción

if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +


NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))

Código 3. Cotas en longitud de los puntos del intradós del perfil del encastre

if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.97\Offset =


(Semienvergadura+((NACA1/100)*(20/1000*Cuerda)*(2*(NACA2/10)-20/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.97\Offset = (Semienvergadura +((NACA1/100)*(Cuerda-20/1000*Cuerda)*(-
2*(NACA2/10)+20/1000+1)/(1-NACA2/10)**2)-NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.1260*(20/1000)-0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1-(NACA2/10))**2)*((NACA2/10)-(20/1000)))))

Código 4. Cotas en altura de los puntos del intradós del perfil del encastre

Con todo esto ya se tienen las coordenadas , , e parametrizadas con el número del perfil NACA y
con la cuerda. En las ecuaciones implementadas en los Código 2 y Código 4 se ha añadido la cantidad
Semienvergadura (Cuerda si solo se dibuja el perfil y no el ala) para que todos los puntos estén elevados esa
cantidad respecto al origen de coordenadas por los motivos comentados anteriormente.

Una vez realizado todo el proceso e introducidas todas las frases en el recuadro de programación de la Rule
pulsamos Apply y OK. Posteriormente a esto, se dibuja un Spline sobre todos los puntos, obteniendo
finalmente el perfil del encastre. En la Figura 18 y la Figura 19 se puede ver un ejemplo de perfil NACA, uno
con incidencia nula y otro con un ángulo de incidencia no nulo.

Figura 18. Perfil NACA con incidencia nula

18
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 19

Figura 19. Perfin NACA con ángulo de incidencia

El siguiente paso después de dibujar el perfil del encastre es definir un plano paralelo al del Sketch donde se ha
dibujado dicho perfil a una distancia igual a la semienvergadura. Para ello se debe editar una fórnula con ese
parámetro para el offset del plano, de forma que la distancia entre planos se modifique automáticamente con
tan solo cambiar el valor de Semienvergadura.

Con el plano ya creado se procede a crear un nuevo Sketch dentro de éste donde se dibujará el perfil de la
punta del ala. Antes de comenzar a dibujar el perfil, se debe parametrizar algunas características muy
importantes en las alas, que son: el diedro y la flecha. En la Figura 20 y la Figura 21 podemos visualizar que
significa cada característica respectivamente.

Figura 20. Vista frontal ala, ángulo de diedro

Figura 21. Vista en planta ala, ángulo de flecha

Para conseguir parametrizar el diedro y la flecha lo que se debe hacer es acotar el punto que define el borde de
ataque del perfil de la punta del ala. Para ello, tal y como aparece la Figura 22, se le debe sumar a las distancias
19
20 Introducción

vertical y horizontal correspondientes al hecho de introducir un ángulo de diedro y de flecha al ala así como las
distancias que se le sumaron al perfil del encastre para que en caso de diedro y flecha nula, ambos puntos
coincidan.

Figura 22. Constraint punto borde de ataque perfil punta ala

Una vez parametrizado el punto del borde de ataque del perfil de la punta del ala, el siguiente paso sería
dibujar las líneas que se utilizarán como sistema referencia de referencia local necesarias para parametrizar la
torsión del ala. Estas líneas se crearán y acotarán de la misma forma que las que se creó para parametrizar la
incidencia del perfil del encastre, con la diferencia de que en este caso el ángulo que se introduce en la fórmula
es la suma de la incidencia y la torsión. En la Figura 23 se puede observar el aspecto que tendría dichas líneas
de referencia, además, en blanco se puede ver el perfil del encastre, dibujado previamente, así como el punto
que define el borde de ataque rodeado por un círculo amarillo.

Figura 23. Lineas de referencia del perfil de la punta del ala

20
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 21

Ahora que ya tenemos las líneas de referencia perfectamente acotadas, el siguiente paso es volver a crear 60
puntos por encima del origen de coordenadas y contenidas dentro de las líneas de referencia tal y como se hizo
para el perfil del encastre del ala. Después de esto, se acotarán todos los puntos por su distancia en longitud y
altura a las líneas de referencia siguiendo la misma lógica empleada en el perfil del encastre.

A continuación, se tiene que crear la Rule a través de la cual se conseguirá parametrizar todos los puntos del
perfil. En este caso, a diferencia del otro perfil, se introducirá en la ecucación que define el perfil el parámetro
estrechamiento a través del cual se consigue definir la cuerda del perfil de la punta de ala. Para ello se
introducirá el trozo de línea ((100-Estrechamiento)/100)*Cuerda dentro de la condición en el lugar donde
ponía cuerda anteriormente.

En este caso, se introducirá las líneas de código del Código 5 para las cotas en longitud del extradós del perfil,
el Código 6 para las cotas en altitud del extradós del perfil, el Código 7 para las cotas en longitud del intradós
del perfil y el Código 8 para las cotas en altitud del intradós del perfil. Las cotas irán de la 134 a la 163, de la
164 a la 193, de la 194 a la 223 y de la 224 a la 253 respectivamente. Además, en dichos códigos, se puede
observar que los parámetros que definen el número de perfil NACA utilizado, se llaman de distinta forma que
los del encastre, pudiendo tener de esta forma perfiles diferentes en cada extremo del ala, permitiendo que la
geometría del perfil vaya variando a lo largo de la envergadura si esto fuese requerido.

if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))


PartBody\Sketch.2\Offset.135\Offset = (20/1000*((100 - Estrechamiento)/100)*Cuerda -
NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2T/10)**2)*((NACA2T/10)-(20/1000))))) else
PartBody\Sketch.2\Offset.135\Offset = (20/1000*((100-Estrechamiento)/100)*Cuerda -
NACA34T/(100*0.2)*((100-Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))

Código 5. Cotas en altura de los puntos del extradós del perfil de la punta del ala

if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))


PartBody\Sketch.2\Offset.165\Offset = (Semienvergadura*tan(Diedro))+(Cuerda
+((NACA1T/100)*(20/1000*((100-Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
20/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2T/10)**2)*((NACA2T/10)-(20/1000))))) else
PartBody\Sketch.2\Offset.165\Offset = (Semienvergadura*tan(Diedro))+(Cuerda
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-20/1000*((100-Estrechamiento)/100)*Cuerda)*(-
2*(NACA2T/10)+20/1000+1)/(1-NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))

Código 6. Cotas en longitud de los puntos del extradós del perfil de la punta del ala

21
22 Introducción

if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))


PartBody\Sketch.2\Offset.195\Offset = (20/1000*((100-Estrechamiento)/100)*Cuerda +
NACA34T/(100*0.2)*((100-Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2T/10)**2)*((NACA2T/10)-(20/1000))))) else
PartBody\Sketch.2\Offset.195\Offset = (20/1000*((100-Estrechamiento)/100)*Cuerda +
NACA34T/(100*0.2)*((100-Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))

Código 7. Cotas en longitud de los puntos del intradós del perfil de la punta del ala

if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))


PartBody\Sketch.2\Offset.225\Offset = (Semienvergadura*tan(Diedro))+(
Semienvergadura+((NACA1T/100)*(20/1000*((100-Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
20/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2T/10)**2)*((NACA2T/10)-(20/1000))))) else
PartBody\Sketch.2\Offset.225\Offset = (Semienvergadura*tan(Diedro))+( Semienvergadura
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-20/1000*((100-Estrechamiento)/100)*Cuerda)*(-
2*(NACA2T/10)+20/1000+1)/(1-NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))

Código 8. Cotas en altura de los puntos del intradós del perfil de la punta del ala

Por último, para el perfil de la punta del ala, comentar que al igual que el perfil del encastre, la coordenada x
debe ir de 20 a 1000 la cual esta adimensionalizada con la cuerda de forma que x/1000*Cuerda va de
20/1000*Cuerda hasta 1000/1000*Cuerda. Se debe dividir los elementos por 1000 ya que las unidades de los
parámetros tipo variable real están en el SI y las cotas en milímetros.

Una vez tengamos la Rule creada con todas las líneas de códigos para el perfil de la punta del ala, se dibujará
un Spline con dichos puntos, obteniendo finalmente el dibujo del perfil.

A continuación se van a ilustrar una serie de figuras donde se representan las distintas características
mencionadas anteriormente. En todas ellas se representará en blanco el perfil del encastre y en verde el de la
punta del ala.

 En la Figura 24 se ha dibujado un perfil con un estrechamiento del 30% para el perfil de la punta del
ala.

22
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 23

Figura 24. Estrechamiento

 En la Figura 25 se ha dibujado perfiles distintos para cada extremo del ala.

Figura 25. Perfiles distintos

 En la Figura 26 se ha dibujado el perfil del encastre con un ángulo de incidencia y el de la punta del
ala con un ángulo de torsión. Aunque el ángulo de torsión en este ejemplo sea más grande que el de
incidencia, este puede ser menor.

Figura 26. Incidencia y Torsión

 En la Figura 27 se puede visualizar como modifica la ubicación del perfil de la punta del ala respecto
al del encastre al introducir flecha y diedro al ala que se esta diseñando.

23
24 Introducción

Figura 27. Diedro y Flecha

Llegados a este punto del diseño, ya se tiene ambos perfiles correctamente dibujados y parametrizados, por lo
que ahora se debe dibujar la línea que unirá los puntos del borde de ataque de todos los perfiles a lo largo de la
semienvergadura. Para ello, solo se tiene que crear una línea en el entorno 3D que una los puntos del borde de
ataque del perfil del encastre y de la punta del ala, obteniedo algo parecido a lo representado en la Figura 28.
Referencia [5]

Figura 28. Perfiles y línea de borde de ataque

A partir de aquí, ya tan solo se tiene que extruir el ala, ya sea como superficie o como sólido, y aplicar las
diferentes simetrías para llegar al resultado final que se requiera, el cual puede ser:

1. Semiala izquierda en superficie o sólida.

2. Semiala derecha en superficie o sólida.

3. Ala completa en superficie o sólida.

Se recomienda que en todos los casos, la extrusión del ala y demás operaciones se realicen en el módulo de
superficies y que si al final se requiere un ala sólida, se utilice la herramienta Close Surface dentro del módulo

24
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 25

Part Design de CATIA para obtenerla. Por último, comentar que al trabajar con superficies se debe realizar
cuando se acabe de trabajar un Join que contenga las diferentes operaciones realizadas dentro del módulo
Wireframa and Surface Design para unir todas los elementos. En la Figura 29 se ilustra un ejemplo del
resultado final de la realización del proceso de diseño paramétrico explicado en este apartado.

Figura 29. Ejemplo resultado final del diseño de un ala cualquiera

Como se puede ver después de leer este apartado, el proceso de diseño geometríco de un ala en CATIA no es
algo trivial y menos aún si se realiza un diseño parametrizado. Debido a lo costoso y complicado que resulta
llevar a cabo dicho proceso se decidió intentar crear una macro que realizase todo esto automáticamente.

25
26 Introducción

26
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 27

2 EL ENTORNO DE PROGRAMACIÓN VBA EN


CATIA V5

Puedes cerrar todas las bibliotecas si quieres, pero no


hay barrera, cerradura, ni cerrojo que puedas imponer
a la libertad de mi mente.
- Virginia Woolf -

E n este capítulo se va a explicar a grandes rasgos rasgos el lenguaje de programación VBA (Visual Basic
for Applications). Una vez introducido el entorno en el que se va a trabajar, se procederá a explicar el entorno
general de trabajo VB6, así como nociones generales de programación de dicho lenguaje.

2.1 Visual Basic for Application

Como su nombre indica, el lenguaje de programación Visual Basic procede del denominado BASIC
(Beginner’s All-purpose Symbolic Instruction Code) que fue creado en 1964 en el Dartmouth College, como
un medio para iniciarse en el mundo de la programación. Tras varias modificaciones, en 1978 se estableció el
BASIC standard. Primero fue nombrado como GW-BASIC, luego quedó en QuickBASIC y actualmente se le
conoce como Visual Basic tras adaptarse al entorno de ventanas “Windows” e incorporar herramientas de tipo
visual como botones, listas de texto o cuadros de texto asociadas a eventos. La primera versión de Visual Basic
fue presentada en 1991, siendo la última la versión 6, liberada en 1998.

Visual Basic for Applications (VBA) es el lenguaje de macros de Visual Basic v6. Éste fue incorporado en
muchas aplicaciones de Microsoft y posteriormente en otras aplicaciones para ampliar la funcionalidad de las
mismas. VBA incorpora las librerías y herramientas de Visual Basic, a las que añade librerías de objetos
propias de cada software donde esta incluido. La debilidad de este lenguaje radica en que la compilación de la
macro no puede realizarse si no se dispone del entorno en el que se ha desarrollado. Otra debilidad es su falta
de versatilidad para trabajar en otros sistemas operativos.

27
28
El entorno de programación VBA en CATIA V5

CATIA en 1998 con la versión V5 incorporó VBA a su entorno, pudiendo realizar macros en VB y en leguaje
C++, siendo aún los lenguajes de macros que se han dispuesto para su versión V6. Referencia [9]

2.1.1 Entorno

En primer lugar se va a explicar que es una macro, ya que es importante saber que es lo que estamos
realizando. Una macro consiste en una serie de funciones escritas en un lenguaje de programación que agrupa
una serie de comandos, los cuales permiten realizar las operaciones requeridas automáticamente. Son usadas
para ahorrar tiempo y reducir la posibilidad de errores humanos a la hora de realizar operaciones que se llevan
a cabo de forma repetitiva.

El uso de macros para la automatización en el proceso de diseño es prácticamente ilimitado, siendo algunos
ejemplos la importación de puntos desde Excel a un modelo CAD 3D, la generación de geometrías de manera
automática, la cración de planos de modelos 3D, etc.

Para acceder al entorno de trabajo VBA no hace falta estar en ningún módulo de CATIA específico, se puede
acceder a él desde cualquier módulo con tan solo pinchar dentro de la pestaña Tools en la opción Macros.
Dentro de ésta se podrá o bien comenzar a grabar una macro, acceder a las macros ya realizadas y librerías o al
editor de Visual Basic, ver Figura 30. Referencia [10]

Figura 30. Acceso a macros

2.1.2 Librerías de las macros

Las macros de CATIA pueden ser almacenadas en las librerías de macros de tres formas posibles: Folders
(vbscript y CATScript), Project files (catvba) o CATParts/CATProducts. Solo una de estas tres librerías de
macros puede ser usada a la vez. Para crear una librería el procedimiento a usar es el siguiente.

28
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 29

1. Ir a Tools → Macro → Macros.

2. Abrir “Macro libraries”.

3. Asegurarse de que el tipo de librería esté cargada en “Directories” y luego hacer click en “Add
existing library”.

4. Seleccionar la carpeta donde se van a guardar los CATScripts a lo largo del proyecto.

5. Cerrar la librería de macros. En dicha librería deberían aparecer posteriormente la lista de


CATScripts que se realicen.

Referencia [10]

2.1.3 Macro Recording

Un método para crear macros es grabando las acciones que se realicen con el ratón. Para macros grabadas en
un fichero o en un CATPart o CATProduct, los estamentos declarados se grabarán para CATScript pero no
para MSVBScript. Para macros grabadas en una librería, “MS VBA” es la única opción. A la hora de grabar
una macro mediante este procedimiento hay que tener en cuenta algunos aspectos:

 No seleccionar Workbenches (entornos de trabajo) mientras se está grabando una macro.

 No grabar más de lo que sea absolutamente necesario.

 No usar la opción “deshacer” mientras se está grabando.

 Ser consciente y darse cuenta de la configuración de CATIA cuando se está grabando.

 Salir de los sketches (dibujos) antes de parar de grabar.

 Verificar cada macro una vez se haya grabado.

Una vez se haya finalizado la grabación, se deshará todo lo realizado y se reproducirá la macro, de manera que
se podrá comprobar si es correcta la macro y si reproduce la operación que se quería realizar.

También hay que tener en cuenta que mediante dicho procedimiento aparecerán numerosas líneas de código
que no son realmente necesarias, por lo que pueden eliminarse.

Por otro lado, tampoco aparecerán comentarios acerca de lo que se está haciendo o explicando los parámetros
de entrada, por lo que se deberán añadir manualmente. Referencia [10]

Durante la realización de este proyecto se ha hecho uso de esta herramienta para aprender a usar operaciones
de gran complejidad de las cuales no existía mucha información al respecto. Sin embargo, todos los códigos
desarrollados en el presente proyecto se han realizado mediante la opción que se explica en el siguiente
apartado.

29
30
El entorno de programación VBA en CATIA V5

2.2 Visual Basic Editor

El entorno de Visual Basic Editor es sobre el que se ha desarrollado este Trabajo Fin de Grado. Para acceder al
mismo debemos pinchar en Tools → Macro → Visual Basic Editor apareciendo la ventana de la Figura 31.
Todo lo que se programe y se realice dentro de esta ventana puede interactuar directamente con CATIA si
empleamos los objetos del programa. Antes de comenzar conviene analizar detenidamente cada una de las
partes o bloques que constituyen el entorno donde se realiza toda la programación.

Figura 31. Entorno VBA

Antes de comenzar a programar conviene tener a disposición del programador tanto el menú denominado
Project Explorer como el de Propierties Windows, ya que son fundamentales y facilitan mucho el trabajo. Para
acceder a estas ventanas es necesario ir a la pestaña View y adjuntar ambas aplicaciones a la pantalla principal,
tal como se muestra en la Figura 32.

Figura 32. Ventana Project Explorer (Rojo) y Properties Window (Amarillo)


30
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 31

La ventana Project Explorer recoge todos los datos y archivos que conforman el Project o proyecto de
programación sobre el que se está trabajando, suelen exportarse con extensión *.vbp, aunque CATIA lo
almacena como *.catvba. Puede contener módulos (Modele), formularios (Useforms) y clases (Class module).

 Módulos: son programas o rutinas independientes. Dado que el código contenido en un módulo
estándar de Visual Basic es accesible desde distintos formularios del programa, será ventajoso colocar
en este módulo todo lo que queramos disponer como “código compartido”, es decir, que puede ser
utilizado en cualquier formulario del programa. Se guardan para su exportación en ficheros con
extensión *.bas.

 Formularios: son rutinas asociadas a ventanas gráficas donde se incorporan objetos y eventos. Los
formularios son el elemento básico que permite la interacción del programa con el usuario,
demandando variables, opciones, etc. Se almacenan con extensión *.frm.

 Clases: son definiciones de nuevos objetos de tipo plantilla donde se definen las propiedades y
eventos del mismo, son almacenados como *.cls.

En la ventana Propierties Windows se refleja en una columna todas las propiedades de cada formulario o
control que se tenga seleccionado en el momento en la ventana Project Explorer. Para acceder a dicha
información solo tenemos que pinchar sobre el formulario o control deseado. Además, estas propiedades
pueden ser cambiadas durante el diseño de dichos controles o formularios.

Por último, en este apartado se va a explicar otra ventana que ha sido de mucha utilidad en la ejecución de este
Trabajo Fin de Grado, la ventana Object Browser, a la cual se accede haciendo click en el icono
correspondiente señalado con un circulo rojo en la Figura 33, en dicha figura también podemos ver la
apariencia de dicha ventana.

Figura 33. Ventana Object Browser

31
32
El entorno de programación VBA en CATIA V5

Dicha herramienta resulta de gran ayuda cuando se está en un punto de la programación en la que no se sabe
bien qué hacer, cómo seguir o cómo funciona cualquier tipo de objeto. Si escribimos cualquier objeto en la
barra de búsqueda, se muestran tres columnas que ayudan a controlar dicho objeto. La tercera de ellas, la
columna members, muestra distintas formas para realizar la misma operación, eligiéndose la más conveniente.
La segunda columna, muestra a qué tipo de objeto pertenece la operación que se quiere realizar, por lo que ya
se sabrá que objeto hay que definir para poder acceder a la herramienta deseada. Referencia [11]

2.3 Iniciación a la programación

Visual Basic es un lenguaje de programación por eventos, es decir, la ejecución del programa se produce en
diferentes secciones debido a respuestas a eventos. Estos se producen por la interacción con el usuario
mediante una interfaz gráfica que solicita al usuario los parámetros necesarios para la ejecución de cualquier
acción o también debido a la existencia de otras aplicaciones que desencadenan dichos eventos. Los eventos,
ejecutados en forma de secuencia, determinan como se lee el código implementado.

Por esta razón, a la hora de programar, se tiene que prestar especial atención a cómo se está escribiendo el
código para que responda de forma adecuada a los eventos para los que se diseñe la aplicación.

En la Tabla 2 se definen una serie de conceptos básicos totalmente necesarios de conocer ya que sobre ellos se
basa la programación controlada por eventos.

Concepto Definición
Tiempo de diseño Instante en que se crea la aplicación
Instante en el cual se ejecuta e si interactúa con la
Tiempo de ejecución
aplicación.
Ventana sobre la que es posible personalizar la
Formulario interfaz de la aplicación o cuadro de diálogo para
obtener información del usuario.
Objetos Formularios y controles.
Representación gráfica de objetos, con los que el
Controles usuario interactúa e aporta la información que se le
pide.
Los valores de un objeto (Properties Window
antes mencionada).Son características de un
Propiedades
objeto, y definen el estado del mismo en un
momento específico.
Las acciones que un objeto puede realizar sobre sí
Métodos mismo. Se suelen usar verbos para dar nombre a
los métodos.

32
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 33

Acciones que son reconocidas por un formulario o


Eventos control. Los eventos ocurren a medida que el
usuario interactúa con los objetos de la aplicación.
Grupo o lista de objetos similares que se ponen
juntos por una razón específica. Las colecciones
Colección
son objetos que agregan un conjunto de otros
objetos.
Definen un tipo de objeto. Se suele usar la
Clases herencia para crear jerarquía entre clases y
subclases.
Todos aquellas clases que sean herencia de la
misma clase tienen todas las propiedades y
métodos en común de la herencia de la que
Herencia
provienen, pero también tienen sus propios
métodos y propiedades que las diferencian entre
ellas.
Tabla 2. Conceptos básicos de la programación

Referencia [9] y [10]

A continuación vamos a explicar otros conceptos que convienen resaltar antes de comenzar a programar.

2.3.1 Declaración de estamentos

En Visual Basic antes de poder trabajar con una determinada variable, constante o herramienta, es necesario
nombrarla, obteniendo de esta forma una primera información acerca del estamento que posteriormente
estableceremos.

Si no definimos el tipo de variable, VBA decrarará la variable de tipo Variant, la cual puede aceptar cualquier
tipo de variable. Cabe destacar que en muy raras ocasiones se tiene una buena razón para usar una variable tipo
Variant. En la mayaría de ocasiones tendremos que usar un determinado tipo de variable, haciendo de esta
manera que el código se ejecute más rápido y reduciendo errores, lo cual se debe a que:

1. CATIA ejecutará el tipo de variable que se especifique.

2. A la hora de revisar el código, siempre se sabrá de qué tipo es cada variable y la intención por la cual
se creó.

El comando que se usa para definir el tipo de variable con el que se trabaja es Dim. En el Código 9 se muestra
un ejemplo.

Dim documents1 As documents

Código 9. Declaración de estamento

33
34
El entorno de programación VBA en CATIA V5

[Referencia 10]

2.3.2 Estamentos

Son una instrucción completa que puede contener Keywords (and, if, for, while, sub, function …), operadores
(+, -, *, / …), variables, constantes y expresiones. Un ejemplo de estamento sería el del Código 10.

Set partDocument1 = CATIA.ActiveDocument

Código 10. Estamento

Donde el comando Set se usa para asociar la variable definida con un objeto.

Referencia [9]

2.3.3 Estamentos ejecutables

Se trata de acciones iniciales como el del Código 11.

Select1.Search(“name=’Optimization.MinimumValue’,all”)

Código 11. Estamento ejecutable

Referencia [9]

2.3.4 Funciones y subfunciones

Son una secuencia de estados que conforman la operación deseada. Esta operación viene especificada en una
función.

Sub mySubwithParameter (myParameter)


MsgBox myParameter
End Sub

Código 12. Subfunción

La diferencia entre function y sub es que mientras la primera te devuelve un valor, la segunda no.
Referencia [9]

2.3.5 Estructuras condicionales e iterativas

2.3.5.1 Condicionales

Durante la programación, muchas veces se llega a situaciones en que es conveniente utilizar condicionales
para comprobar, por ejemplo, que un valor se encuentra en un intervalo aceptable, es conveniente hacer uso de
34
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 35

la ejecución: if… then…

La estructura es la del Código 13.

If [condición] Then
[Estamento]
Elself [condición] Then
[Estamento de Elself]
Else
[Estamento de Else]
End If

Código 13. Estructura condicional

Referencia [9]

2.3.5.2 Iterativas

Otra de las estructuras usadas con mucha frecuencia en la programación son las iterativas. Éstas son aquellas
en las que se realiza una misma operación varias veces consecutivas con el fin de encontrar un valor justo o
que haga funcionar un programa hasta que cierta condición se cumpla. Para hacer posible esto, existen varias
configuraciones, las cuales se comentan a continuación.

1. For … Next: se utiliza cuando queremos iterar un número de cosas dado.

Contador
For [contador] = [inicio] To [end] {paso a paso}
[Estamentos]
Next

Código 14. Estructura For … Next

2. While … Wend: se utiliza cuando iteramos hasta que el contador cumple cierta condición.

Contador
While [{Contador} Condición]
[Estamentos]
Wend

Código 15. Estructura While … Wend

3. Do … Loop: se utiliza cuando iteramos siempre que se cumpla cierta condición.

Do [{While|Until} condition]

35
36
El entorno de programación VBA en CATIA V5

[Estamentos]
[Exit Do]
[Estamentos]
Loop
Do [Estamentos]
[Exit Do]
[Estamentos]
Loop [{While|Until} condition]

Código 16. Estructura Do … Loop

4. For each … Next: se utiliza cuando se quiere iterar sobre los objetos en una determinada colección.

Referencia [9]

2.3.6 Objetos orientados a la programación

Los objetos son una parte de memoria en la que está contenida cierta información y metodología que permite
operar con dicha información almacenada. Requiere de un cierto código especial para hacer que funcione, ya
que dispone de comportamientos definidos por métodos específicos tales como:

1. Pasar información a través de parámetros.

2. Operaciones de cálculo que pueden:

a. Cambiar cierta parte de los datos iniciales.

b. Diseñar ciertas operaciones que no están por defecto.

c. Devolver valores de los datos iniciales.

d. Devolver resultados de los cálculos usando tanto la información introducida externamente como
de la contenida en el objeto

Referencia [9]

2.3.7 Cómo definir un objeto

Para cada objeto en particular se define una clase (classe) que sirve como plantilla en la que se recoge cómo
operan los objetos y los datos que contienen. Es conveniente resaltar que una clase puede ser utilizada para
hacer funcionar uno o más objetos.

Clase Objeto
Describe la estructura del objeto Es el resultado de la clase
Es una plantilla Tiene una copia única de toda variable no-

36
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 37

estática pero no de las variables tipo clase


Especifica la representación de la
(static).
información, el comportamiento, la
interrelación (via variables, métodos y
parents-estructura lógica)
Tabla 3. Diferencias entre clase y objeto

Referencia [9]

2.4 Interfaz con el usuario

En este apartado se explica cómo podemos crear nuestra propia interfaz para interactuar con el programa y así
llegar a la programación por eventos de la que se habló ateriormente. Para ello se tiene que crear un formulario
sobre el que se diseña la interfaz añadiendo los distentos controles necesarios para que el usuario interactúe
con la aplicación.

Para insertar un formulario abrimos la pestaña Insert → Userform. El formulario tiene una forma como la que
se puede apreciar en la Figura 34.

Figura 34. Formulario de trabajo

Ahora sólo falta añadir los elementos visuales através de los cuales se permite al usuario controlar el programa.
Para ello es necesario activar la ventana de herramientas Toolbox, lo cual haremos desde la pestaña view →
Toolbox Dicha ventana se muestre en la Figura 35.

Figura 35. Herramientas de diseño

37
38
El entorno de programación VBA en CATIA V5

A continuación se en la Tabla 4 se analizan a grandes rasgos cada una de las herramientas existentes en este
bloque de trabajo.

Símbolo Etiqueta Descripción

Label Permite escribir títulos o comentarios.

TextBox Permite al usuario introducir texto.

Control en el que se muestran varios


ListBox registros, pudiendo seleccionar uno o más
de uno.
Control parecido al ListBox con una
ComboBox propiedad llamadaStyle, que permite 3
formas distintas de presentar una lista.
CheckBox Permite seleccionar una acción al usuario.

OptionButton Permite seleccionar una opción al usuario.

ToggleButton Botón para selección de opciones.

Agrupar diferentes objetos referidos a un


Frame
mismo tema.
CommandButton Permite ejecutar un evento.
TabStrip Separadores o etiquetas.

MultiPage Contenedor para una colección de objetos.

Permite tener una barra para


ScrollBar
desplazamientos.
Permite aumentar o disminuir la cifra
SpinButton conforme se presionan las flechas del
control.

Image Insertar una imagen en el formulario.

Tabla 4. Opciones de la barra de herramientas

La interfaz por si sola no realiza ninguna operación por lo que hay que introducir un código y programar cada
uno de ellos. Para añadirlos sólo hay que hacer doble click sobre el mismo formulario y se abrirá una ventana
como la de la Figura 36, la cual se corresponde a la de un CommandButton.

38
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 39

Figura 36. Editor

Acontinuación resulta conveniente describir la ventana de diálogo de la Figura 36. En ella se distinguen dos
pestañas, una verde donde se recoge la lista de objetos disponibles para programar y una amarilla que indica
para el objeto seleccionado, los eventos disponibles. Por último, en la esquina inferior izquierda, se tienen los
botones para ver el procedimiento y el módulo.

En los siguientes apartados se explicará cómo funcionan algunos de los controles que se han mostrado en esta
sección.

Finalmente, cuando tengamos la rutina diseñada, el siguiente paso será probarla. Para ello se dispone de una
serie de opciones correspondientes con el menú Run, Figura 37,disponibles en el menú horizontal.

Figura 37. Comandos para hacer funcionar la aplicación

Cuando seleccionamos el botón Play, el programa se traslada al entorno de CATIA y aparece en pantalla la
aplicación creada. Referencia [9]

39
40
El entorno de programación VBA en CATIA V5

40
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
41
alas NACA de 4 dígitos

3 HERRAMIENTAS DE PROGRAMACIÓN DE
PERFILES Y ALAS

La vida es como montar en bicicleta. Si quieres


mantener el equilibrio no puedes parar.
- Albert Einstein -

E n esta sección se van a presentar todos los procedimientos llevados a cabo para realizar los perfiles y las
alas que se describieron en el apartado 1.6.

Para la ejecución de la aplicación desarrollada, se ha trabajado con cuatro módulos:

1. El módulo Sketcher para realizar los diferentes sketches necesarios.

2. El módulo Part Design para crear sólidos en 3D a través de Sketches.

3. El módulo Wireframe and Surface Design para crear superficies en 3D a través de Sketches.

4. El módulo Knowledgeware para la creación de parámetros, fórmulas y reglas.

3.1 Arranque

El primer paso es definir y establecer el entorno de trabajo, sin necesidad de tener abierto el Part, lo cual se
hará activando algunos parámetros que permitan al programador responder a las acciones que se le indican. De
esta forma, cada vez que ejecutemos la aplicación se creará un nuevo Part. Para ello, se debe implementar el
código escrito en Código 17.

Dim documents1 As Documents


Dim partDocument1 As PartDocument
Dim part1 As Part
Set documents1 = CATIA.Documents

41
42
Herramientas de programación de perfiles y alas

Set partDocument1 = documents1.Add("Part")


Set part1 = partDocument1.Part

Código 17. Arranque de documentos

El Documents crea un nuevo Part, el PartDocument activa el módulo Part Design, que es donde se difinen el
resto de elementos que componen la aplicación desarrolada. Además, se define el archivo Part donde se creará
la pieza, el cual se establece en el PartDocument definido anteriormente.

Una vez tengamos el Part de trabajo definido es preciso crar el árbol de trabajo dónde se reflejarán todas las
operaciones que se vayan realizando durante el proyecto, esto se consigue estableciendo el body de trabajo.
Los bodies son los hijos del Part, por lo que en primer lugar habrá que definir el bodies1 de trabajo y dentro de
estos uno específico body1. Para ello se debe escribir un código como el del Código 18.

Dim bodies1 As Bodies


Set bodies1 = part1.Bodies
Dim bodies1 As Body
Set body1 = bodies.Item("PartBody")
Código 18. Árbol de trabajo

Cuando estamos diseñando cualquier pieza, lo primero que se realiza es un Sketch donde poder dibujar. Dicho
Sketch se genera dentro del body definido anteriormente. Por lo que el siguiente paso es establecer el sistema
de referencia 3D con el que se va a trabajar y posteriormente definir en qué plano de este sistema se va a
realizar el Sketch ya que es un dibujo en 2D. Finalmente, lo colocamos donde se va a realizar el dibujo dentro
del plano de referencia escogido. En el Código 19 se puede ver un ejemplo en el cual se ha escogido el plano
YZ al azar para realizar el Sketch, éste se guarda dentro de la referencia [reference1].

Dim sketches1 As Sketches


Set sketches1 = body1.Sketches
Dim originElements1 As OriginElements
Set originElements1 = part1.OriginElements
Dim reference1 As Reference
Set reference1 = originElements1.PlaneYZ
Dim sketch1 As Sketch
Set sketch1 = sketches1.Add(reference1)

Código 19. Sketches

Hasta este punto se puede observar una jerarquización de la estructura donde cada archivo está activado dentro
de otro de manera que trabajan en un conjunto y en caso de faltar uno de ellos, el programa no encontrará
donde realizar las acciones que se le piden originando el fallo global del mismo.

Con el Sketch y el plano de trabajo creados, lo siguiente es establecer una matriz que define las direcciones
dentro de cada plano, de forma que el programa tenga claro en qué plano de trabajo se encuentra trabajando.

42
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 43

Esto funciona de la siguiente forma, CATIA coge las proyecciones de los vectores que definimos en la matriz
de forma que estos sean perpendiculares entre sí de esta forma si el plano de trabajo no es ninguno de los
planos principales de referencia resulta mas cómodo la elección de los vectores que conforman dicha matriz.

Para el plano YZ que es el que escogimos para el ejemplo anterior habría que escribir el Código 20.

Dim arrayOfVariantOfDouble1(8)
arrayOfVariantOfDouble1(0) = 0# 'Vector unidad x en el plano X
arrayOfVariantOfDouble1(1) = 0# 'Vector unidad y en el plano X
arrayOfVariantOfDouble1(2) = 0# 'Vector unidad z en el plano X
arrayOfVariantOfDouble1(3) = 0# 'Vector unidad x en el plano Y
arrayOfVariantOfDouble1(4) = 1# 'Vector unidad y en el plano Y
arrayOfVariantOfDouble1(5) = 0# 'Vector unidad z en el plano Y
arrayOfVariantOfDouble1(6) = 0# 'Vector unidad x en el plano Z
arrayOfVariantOfDouble1(7) = 0# 'Vector unidad y en el plano Z
arrayOfVariantOfDouble1(8) = 1# 'Vector unidad z en el plano Z
Set sketch1Variant = sketch1

sketch1Variant.SetAbsoluteAxisData arrayOfVariantOfDouble1
'Establece el sistema de ejes absoluto del sketch en 3D

Código 20. Vector de coordenadas

Finalmente se escribe la línea de código del Código 21 para informar que el Sketch1 es el lugar de trabajo a
partir de ese punto y todas las operaciones que se realicen serán sobre el mismo.

part1.InWorkObject = sketch1

Código 21. Establecimiento lugar de trabajo

Después de todo esto ya estamos dentro del Sketch y el siguiente paso es definir y establecer el conjunto de
herramientas para realizar el dibujo 2D y todos los elementos geométricos necesarios.

' Establecimiento del conjunto de herramientas 2D y asignación al sketch de trabajo

Dim factory2D1 As Factory2D


Set factory2D1 = sketch1.OpenEdition()

' Se establecen los elementos geométricos

Dim geometricElements1 As GeometricElements


Set geometricElements1 = sketch1.GeometricElements

' Se define el sistema de ejes dentro del sketch

Dim axis2D1 As Axis2D


Set axis2D1 = geometricElements1.Item("AbsoluteAxis")

' Establecimiento de las direcciones horizontal y vertical

Dim line2D1 As Line2D


Set line2D1 = axis2D1.GetItem("HDirection")
43
44
Herramientas de programación de perfiles y alas

line2D1.ReportName = 1
Dim line2D2 As Line2D
Set line2D2 = axis2D1.GetItem("VDirection")
line2D2.ReportName = 2

'Se cierra el sketch y se establece como objeto de trabajo

sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.Update

Código 22. Objeto Factory 2D

Las últimas líneas del Código 22, cierran el Sketch en cuestión, lo establece como objeto de trabajo, es decir,
sobre el que se realizan a partir de ese punto las operaciones para el modelado de un sólido, y lo carga en el
Part. Referencia [9]

3.2 SKETCHER

Dentro de este módulo existen una serie de objetos y colecciones como Factory2D, Line2D o Axis2D, tal
como se puede apreciar en la que resultarán de gran utilidad en este proyecto.

Figura 38. Estructura del módulo Sketcher

Además, dentro de los objetos del módulo Sketch se encuentra una serie de métodos que se resumen en la
Tabla 5.

44
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 45

Objeto Comentario Contenido


CreateCircle
CreateClosedCircle
CreateClosedEllipse
CreateControlPoint
CreateEllipse
CreateHyperbola
CreateIntersection
Incluye todos los métodos
Factory2D necesarios para poder trabajar CreateIntersections
en el módulo Sketcher
CreateLine
CreateLineFromVector
CreateParabola
CreatePoint
CreateProjection
CreateProjections
CreateSpline
Engloba tres métodos que dan GetDirection
el uni-vector de la dirección de
la recta, un punto sobre la línea
Line2D GetOrigine
y un último que permite
modificar las características de
la línea infinita. SetData
Vienen detalladas las HorizontalReference
Axis2D propiedades del sistema de
Origin
coordenadas
VerticalReference
Tabla 5. Objetos del módulo Sketcher

Una vez vista la estructura y los diferentes métodos que incluye cada objeto dentro del módulo Sketcher, se va
a describir cómo usar los principales objetos y colecciones de dicho módulo para diseñar la geometría de los
diferentes perfiles en cuestión. Referencia [9]

3.2.1 Crear un punto

Como se observa en la Tabla 5, el objeto Factory2D del módulo Sketcher posee herramientas para crear una
amplia gama de geometrías. Se va a describir a continuación cómo crear un punto. Para ello, se usa las líneas
de código del Código 23.

Dim point2D1 As Point2D


Set point2D1 = factory2D1.CreatePoint(coord_x, coord_y)
point2D1.ReportName = 3

45
46
Herramientas de programación de perfiles y alas

point2D1.Construction = False

Código 23. Creación de un punto

Como se puede apreciar, solo es necesario introducir las coordenadas del punto que se desea crear sobre el
sketch activado en dicho momento. A este punto se le puede asignar un nombre para que sea más fácil de
localizar en el Sketch, para ello solo tendríamos que cambiar ponit2D1 en las líneas de código del Código 23
por el nombre que queramos ponerle. A lo largo de todo el trabajo se ha seguido la lógica de llamarlo de la
misma forma que el objeto incluyendo una numeración para identificar rápidamente con qué estamos tratando.

Por otro lado, también se puede imponer que dicho punto no sea de construcción, ya que CATIA lo crea de
construcción por defecto, por este motivo se añade la última línea del Código 23, si se quisiese que el punto
fuese de construcción tan solo tendríamos que cambiar el False por True o simplemente omitir esa línea.
Referencia [9]

3.2.2 Crear una recta

Otra herramienta que se encuentra también en el objeto Factory2D es la que permite crear una recta a partir de
dos puntos, el de origen y el final por lo que se trata de definir dos puntos y unirlos mediante el comando
específico para crear una recta. A continuación, en el Código 24, se expone el código necesario para crear una
recta.

Dim line2D1 As Line2D


Set line2D1 = factory2D1.CreateLine(x1, y1, x2, y2)
line2D1.ReportName = 3
line2D1.StartPoint = point2D1
line2D1.EndPoint = point2D2

Código 24. Creación de una recta

La creación del punto de origen y final (Point2D1 y Point2D2) ha sido omitida en el Código 24, estos se crean
tal y como se ha mostrado en el apartado anterior.

Como es posible apreciar, es preciso hacer uso del comando Line2D para crear la línea y posteriormente
recurrir a Factory2D donde se encuentran todas las herramientas de trabajo en 2D, que en este caso se trata de
CreateLine. Además, hay que señalar tanto el punto de inicio de la recta como el punto final, de forma que el
programa pueda identificar que se trata de hacer una sola recta y no tiene que continuar con otra después.

Por último mencionar que CATIA por defecto crea una línea estándar, es decir, no es de construcción, y a lo
largo de la macro desarrollada se hace uso de líneas de construcción tal y como vimos en el apartado 1.6. Para
hacerlo, tan solo debemos añadir la línea del Código 25 justo antes de definir el punto de inicio y el punto
final. Referencia [9]

46
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 47

line2D3.Construction = True

Código 25. Linea de construcción

3.2.3 Crear un Spline

Como bien sabemos con CATIA es posible crear curvas a partir de puntos de la misma, es decir, a través de
una aproximaximación polinómica a partir de los distintos puntos que las conforman. Dichas curvas reciben el
nombre de Spline.

Para generar un Spline en primer lugar se deben crear los puntos a través de los que se dibujara la curva, estos
puntos no son unos puntos normales sino puntos de control. Para crear dichos puntos de control se hace uso de
la herramienta ControlPoint2D del objeto Factori2D.

Para originar los puntos de control se procede de forma similar a la creación de un punto pero ahora se usa el
comando CreateControlPoint tal y como se observa en el Código 26 donde se crean varios puntos de control a
través de los que se dibujará el Spline.

Dim controlPoint2D1 As ControlPoint2D


Set controlPoint2D1 = factory2D1.CreateControPoint(x1, y1)

controlPoint2D1.ReportName=3

Dim controlPoint2D2 As ControlPoint2D


Set controlPoint2D2 = factory2D1.CreateControPoint(x2, y2)

controlPoint2D2.ReportName=4

Dim controlPoint2D3 As ControlPoint2D


Set controlPoint2D3 = factory2D1.CreateControPoint(x3, y3)

controlPoint2D3.ReportName=5

Dim controlPoint2D4 As ControlPoint2D


Set controlPoint2D4 = factory2D1.CreateControPoint(x4, y4)
controlPoint2D4.ReportName=6

Código 26. Creación de un punto de control

Una vez creado los puntos de control, se debe crear un vector que incluya todos los ControlPoint que
conformarán la curva que queremos desarrollar. A la hora de crear dicho vector se debe tener especial cuidado
a la hora de ir rellenando el vector ya que la curva recorrerá los puntos de control en el mismo orden que los
introducimos. Por último, se debe hacer uso del comando CreateSpline del objeto Spline para generar la curva.
Todo esto se puede ver en el Código 27.

47
48
Herramientas de programación de perfiles y alas

Dim arrayOfObject1(3)
Set arrayOfObject1(0) = controlPoint2D1
Set arrayOfObject1(1) = controlPoint2D2
Set arrayOfObject1(2) = controlPoint2D3
Set arrayOfObject1(3) = controlPoint2D4

Dim spline2D1 As Spline2D


Set factory2D1temp=factory2D1
Set spline2D1 = factory2D1temp.CreateSpline(arrayOfObject1)
spline2D1.ReportName = 7

Código 27. Creación de un spline

Como se puede apreciar, el único argumento de entrada que precisa para el correcto funcionamiento de dicha
herramienta es el vector objetos que en este caso son los ControlPoint. Referencia [10]

3.3 Restricciones

Para que el Sketch quede bien definido y fijo, es decir, que sea inalterable por algún error cuando se esté
creando o manipulando, es necesario establecer las restricciones o Constraints.

Las Constraints trabajan con referencias, es decir, hay que establecer la referencia de cada uno de los objetos
del Sketch. Una vez estén definidas, es necesario una instrucción que permita relacionarlas entre sí, para lo cual
se usa el Código 28.

constraintsX.AddBiEltCs(CatCsTypeDistance, reference1, reference2)

Código 28 Creación constraints de forma general

En el comando del Código 28 se observan dos propiedades de gran interés:

 La instrucción AddBiEltCs que nos refleja que la restricción va a usar dos referencias, es decir, se van
a relacionar dos objetos. Esta propiedad cambien en función de cuantos objetos se quieran relacionar,
pueden ser uno, dos o tres objetos. Para ello solo se ha de cambiar el prefijo Bi- por el
correspondiente, es decir, una restricción AddMonoEltCs solo necesitará una referencia y una
AddBiEltCs tres referencias. En este proyecto solo se trabajará con restricciones de dos referencias.

 La instrucción CatCsTypeDistance que refleja el tipo de restricción que se esta imponiendo. Esta
cambia en función del tipo de restricción que se quiera usar. En la Tabla 6 se observa todos los tipos
de restricciones que existen.

48
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 49

Número de referencias Tipo


CatCsTypeAngle
CatCsTypeAnnulContact
CatCsTypeParallelims
CatCsTypePerpendicularity
CatCsTypeChamfer
CatCsTypeConcentry
CatCsTypeDistance
CatCsTypeHorizontaly
BiEtlcs
CatCsTypeLength
CatCsTypeLineContact
CatCsTypeMajor/MinorRadius
CatCsTypeMidpoint
CatCsTypeOn
CatCsTypePlanarangle
CatCsTypeDistance
CatCsTypeTangency
MonoEtlC CatCsTypeRadius

TriEtlcs CatCsTypeSimetry
Tabla 6. Restricciones

Para este tipo de órdenes, el programa sabe perfectamente que las referencias en cuestión se encuentran
relacionadas según el tipo de restricción utilizada. Sin embargo, no conoce la cantidad exacta del parámetro, el
cual dependerá del tipo de restricción en cuestión, que las relaciona (distancia, ángulo…). Por este motivo,
hay que señalar que Constraint tiene dos modos de trabajo, estos son:

1. Modo Constraint: el valor asignado restringe la geometría en dicha posición.

Constraints1.Mode = CatCstModeDrivingDimension

Código 29. Modo Constraint

2. Modo Measurement: el valor solo refleja aquello que puede ser observado desde dicha posición.

Constraints1.Mode = CatCstModeDrivenDimension

Código 30. Modo Measurement

49
50
Herramientas de programación de perfiles y alas

A continuación se va procede a explicar las restricciones empleadas en el desarrollo de este Trabajo Fin de
Grado. Referencia [9]

3.3.1 CatCstTypeDistance

Esta restricción se usa para fijar la posición respecto al origen de coordenadas o la distancia entre dos objetos.
También es posible utilizarlo para determinar la longitud de algunos objetos.

Además de los comandos introducidos al inicio de la subsección, es necesario declarar el valor de una longitud
que será definida como la dimensión de la restricción. El procedimiento a seguir se detalla en el Código 31.

‘Establecimiento de las constraints

Dim constraints1 As Constraints


Set constraints1 = sketch1.Constraints

‘Constraint de la distancia horizontal de un punto al origen de coordenadas.

Dim reference7 As Reference


Set reference7 = part1.CreateReferenceFromObject(point2D3)

Dim reference8 As Reference


Set reference8 = part1.CreateReferenceFromObject(line2D2)

Dim constraint4 As Constraint


Set constraint4 = constraints1.AddBiEltCst(catCstTypeDistance, reference7, reference8)

constraint4.Mode = catCstModeDrivingDimension

Dim length2 As Length


Set length2 = constraint4.Dimension
length2.Value = x1

Código 31. CatCstTypeDistance

3.3.2 CatCstTypeOn

La restricción CatCstTypeOn es una de las restricciones más interesantes que existen. Dicha restricción
permite imponer la coincidencia de dos puntos o curvas cualesquiera, por lo que permite introducir
imposiciones geométricas muy importantes. En el Código 32, se crea la coincidencia de una recta con un
punto de esta forma la recta siempre va a contener el punto. Como se puede apreciar, primero se hacen
referencia al punto y a la línea por separado y luego se realiza la restricción de coincidencia.

Dim reference2 As Reference


Set reference2 = part1.CreateReferenceFromObject(line 2D7)

Dim reference3 As Reference


Set reference3 = part1.CreateReferenceFromObject(point2D128)

50
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 51

Dim constraint2 As Constraint


Set constraint2 = constraints1.AddBiEltCst(catCstTypeOn, reference2, reference3)
constraint2.Mode = catCstModeDrivingDimension

Código 32. CatCstTypeOn

3.3.3 CatCstTypePerpendicularity

Para fijar que una recta sea perpendicular a otra, se definen las dos rectas como referencias y se aplica la
restricción CatCstTypePerpendicularity a las dos referencias creadas.

Dim reference20 As Reference


Set reference20 = part1.CreateReferenceFromObject(line2D7)

Dim reference21 As Reference


Set reference21 = part1.CreateReferenceFromObject(line2D5)

Dim constraint11 As Constraint


Set constraint11 = constraints1.AddBiEltCst(catCstTypePerpendicularity, reference20, reference21)
constraint11.Mode = catCstModeDrivingDimension

Código 33. CatCstTypePerpendicularity

3.3.4 CatCstTypeAngle

Cuando queremos que una recta forme un ángulo con otra se utiliza la herramienta CatCstTypeAngle. Para ello
habrá que crear un ángulo y darle el valor a la restricción.

Dim reference19 As Reference


Set reference19 = part1.CreateReferenceFromObject(line2D6)

Dim reference20 As Reference


Set reference20 = part1.CreateReferenceFromObject(line2D7)

Dim constraint10 As Constraint


Set constraint10 = constraints1.AddBiEltCst(catCstTypeAngle, reference19, reference20)

constraint10.Mode = catCstModeDrivingDimension

Dim angle10 As Angle


Set angle10 = constraint10.Dimension
angle10.Value = torsionvalor

Código 34. CatCstTypeAngle

3.3.5 CatCstTypeSymetry

Ésta es una de las herramientas más potentes y complejas dentro de las restricciones. Para su uso es necesario
definir tres referencias, puesto que trabaja con tres objetos, estos son:
51
52
Herramientas de programación de perfiles y alas

1. Objeto al que se le aplica la simetría.

2. Objeto respecto al que se aplica la simetría.

3. Eje de simetría

Es importante recalcar que para poder aplicar dicha restricción se necesitan tres objetos, por lo que aparte del
objeto de referencia y el eje de simetría, es necesario crear un objeto arbitrario (del mismo tipo que el primero
por ejemplo) al que aplicar la simetría.

Dim contraintmirror1 As Constraint

Dim refsim1 As Reference


Set refsim1 = part1.CreateReferenceFromObject(point1)

Dim refsim2 As Reference


Set refsim2 = part1.CreateReferenceFromObject(point11)

Dim refsim3 As Reference


Set refsim3 = part1.CreateReferenceFromObject(linemirror)
Set contrainstmirror1 = constraints1.AddTriEltCst(catCstTypeSymmetry, refsim1, refsim2, refsim3)

Código 35. CatCstTypeSymmetry

3.4 CATPART

La sección de CATIA denominada CATPART engloba tres módulos:

1. Wireframe and Surface Design

2. PartDesign

3. GenerativeShapeDesign

De dichos módulos se usarán el módulo PartDesign, para generar módelos sólidos, y el Wireframe And
SurfaceDesign, para generar superficies. A continuación se va a estudiar en profundidad dichos módulos.

3.4.1 PARTDESIGN

Este módulo se centra en una sección del software CATIA en el que se disponen de una gran variadad de
objetos que permiten disponer de toda la información que es necesaria para generar un modelo sólido.

La estructura del Part Design se puede apreciar en la Figura 39, donde los colores significan lo mismo que en
la Figura 38.

52
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 53

Figura 39. Estructura del módulo PartDesign

La estructura, como se puede apreciar, consta de obtejos abstractos (en color morado), objetos particulares (en
amarillo) y más colecciones de objetos (en color azul cian). Se trata de una distribución por sectores y con una
lógica determinada, en la que los objetos están agrupados según la función que realizan.

Como ya se ha mencionado anteriormente, la estructura de CATIA está muy jerarquizada, de manera que por
ejemplo, para acceder a los planos de referencia, habrá que definir en primer lugar los objetos y propiedades
referentes a Plane que contienen dichos planos (PartDocument → Part → OriginElements).

53
54
Herramientas de programación de perfiles y alas

Figura 40. Estructura interna del PartDocument

En la Tabla 7 se recogen las propiedades de cada objeto que se utiliza en el módulo PartDesign, explicando
brevemente que función tiene cada una de ellas.

Propiedad Comando Comentario


Constituye el sistema de
Dim origin1 As OriginElements referencia absoluto del
OriginElements
Set origin1 = part1.OriginElements documento de planos XY,
XZ e YZ.

Dim refsist1 As AxisSystems Es la colección de sistemas


AxisSystems de referencia que pueden
Set refsist1 = part1. AxisSystems existir en el documento Part.
Colección de elementos
geométricos 3D del
Dim geometric1 As GeometricElements PartDocument generadas
GeometricElements
Set geometric1 = Part1.GeometricElements directamente en 3D, es decir,
sin la mediación del módulo
Sketcher
Dim Bodies1 As Bodies Colección de cuerpos sólidos
Bodies
Set Bodies1 = Part1.Bodies dentro del PartDocument
Dim HybBod1 As HybridBodies Colección de OpenBodies
HybridBodies
Set HybBod1 = Part1.HybridBodies (elementos de referencia)

Dim Constraints1 As Constraints Colección de restricciones


Constraints geométricas y dimensionales
Set Constraints1 = Part1.Constraints del PartDocument.
DimRelations1 AsRelations Colección de relaciones del
Relations
SetRelations 1 = Part1.Relations PartDocument.

DimParameters1 AsParameters Colección completa de todos


Parameters los parámetros del
SetParameters1 = Part1.Parameters PartPocument.
Tabla 7. Objetos del PartDesign

54
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 55

La colección de objetos ShapeFactory contiene todas las operaciones que permiten:

 Pasar de un dibujo 2D a un sólido 3D.

 Realizar transformaciones sobre un sólido 3D

 Obtener un sólido a través de una superficie.

Este objeto presenta una amplia gama de operaciones que podemos encontrar en la ventana Object Browser.
Las operaciones más significativas de este objeto las podemos ver en la Tabla 8. Referencia [9]

Objeto Comentario Contenido


AddNewChamfer

AddNewCircPattern

AddNewCloseSurface
AddNewDraft
AddNewEdgeFilletWith
ConstantRadius
AddNewEdgeFilletWith
VaryingRadius

AddNewFaceFillet
Incluye todos los métodos
Shapefactory necesarios para poder trabajar AddNewHole
en el módulo Partdesign.
AddNewLoft
AddNewMirror
AddNewSymmetry

AddNewPad

AddNewPocket

AddNewRecPattern

AddNewRib

AddNewShaft

AddNewSlot

AddNewStiffner

AddNewthickness

AddNewthicksurface

Tabla 8. Herramientas del ShapeFactory

A continuación vamos a explicar mas detalladamente las herramientas expuestas en la Tabla 8 que se han

55
56
Herramientas de programación de perfiles y alas

utilizado para la ejecución del presente proyecto.

3.4.1.1 Close Surface

Esta herramienta es de muy gran utilidad ya que permite pasar del módulo Wireframe and Surface Design al
PartDesign, transformando superficies sin espesor en sólidos macizos. Por este motivo, aunque el Close
Surface pertenece al módulo del PartDesign, muchas veces se engloba dentro del Wireframe and Surface
Design.

El Close Surface se usa para realizar cuerpos con acabados suaves, cerrando superficies y dándoles volumen.
Normalmente esta herramienta complementa a otra llamada Join del módulo de superficies, la cual se
explicará más adelante. En el Código 36 se puede ver un ejemplo de cómo utilizarla. Referencia [9]

‘Cerrar lasuperficie

Dim refc As Reference


Set refc = part1.CreateReferenceFromObject(Join)
Dim myClose As CloseSurface
Set myClose = hpshapefactory.AddNewCloseSurface(refc)
part1.Update

Código 36. Close Surface

3.4.1.2 Mirror

Muchas veces a la hora de trabajar, nos encontramos que el objeto que pretendemos diseñar presenta una
simetría. Para estos casos tenemos la herramienta Mirror, a través de la cual se puede obtener un objeto
completo con tan solo diseñar la mitad de éste, resultando el proceso de diseño mucho más liviano ya que de
esta forma se ahorra tener que hacer la mitad del trabajo prácticamente.

En el Código 37 se puede ver un ejemplo de realización de un Mirror. En él se observa que para la correcta
realización de este, se necesita establecer una referencia, la del plano de simetría, que para el ejemplo expuesto
es el plano YZ. Una vez creada la referencia tan solo debemos ejecutar la orden AddNewMirror de la
colección de objetos shapeFactory para realizar la operación.

Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit


Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
Dim reference281 As Reference
Set reference281 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit2)
Dim mirror1 As Mirror
Set mirror1 = shapeFactory1.AddNewMirror(reference281)

Código 37. Mirror

56
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 57

3.4.1.3 Symmetry

La herramienta Symmetry funciona prácticamente igual que la herramienta Mirror anteriormente explicada. La
única diferencia entre éstas, es que mientras que al hacer un Mirror te quedas con las dos caras, al hacer un
Symmetry solo te quedas con la parte opuesta, es decir, con la mitad del objeto que “no” se ha diseñado. En el
Código 38 se puede ver un ejemplo de cómo utilizar esta herramienta.

Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit


Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
Dim reference281 As Reference
Set reference281 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit2)
Dim symmetry1 As Symmetry
Set symmetry1 = shapeFactory1.AddNewSymmetry2(reference281)
Dim hybridShapeSymmetry1 As HybridShapeSymmetry
Set hybridShapeSymmetry1 = symmetry1.HybridShape

Código 38. Symmetry

3.4.2 WIREFRAME AND SURFACE DESIGN

En este subapartado se procede a dar una visión global del módulo Wireframe and Surface Design, que cómo
es sabido, representa una de las herramientas más potentes de CATIA, proporcionando que dicho programa
tenga la gran relevancia e importancia mundial que tiene.

Las superficies, son elementos que dentro del esquema Part se denominan HybridBodies, como se muestran
en la Figura 39, de ahí la necesidad de activar dicho cuerpo antes de aplicar herramientas propiamente de
superficies. Una vez activado los HybridBodies, se definirá y cargará el objeto HybridShapeFactory, el cual
contiene todas las herramientas necesarias para trabajar con superficies.

De la misma forma que el objeto ShapeFactory del módulo PartDesign el objeto HybridShapeFactory
también posee una amplia gama de operaciones que podemos encontrar en la ventana Object Browser. En la
Tabla 9 podemos ver las herramientas más significativas.

Objeto Comentario Contenido


AddNewFill

AddNewLoft

AddNewJoin
Incluye todos los métodos
HybridShapefactory necesarios para poder trabajar AddNewLinePtPt
en el módulo Partdesign.
AddNewLineTangency

AddNewLineAngle
AddNewBoundary

57
58
Herramientas de programación de perfiles y alas

AddnewCircle3Points
AddNewSymmetry

AddNewPlaneOffset

AddNewPlaneNormal
AddNewPlaneAngle
AddNewPointCoord
Tabla 9. Herramientas del HybridShapefactory

Ahora, una vez indicado que tipo de cuerpo se maneja en las superficies, en la Tabla 10 es posible ver los
iconos y la descripción de las herramientas más importantes dentro de este módulo.

Nombre Icono Función

Herramienta capaz de crear una superficie a


Extrude través de la extrusión de un sketch en diferentes
direcciones y dimensiones.

Crea superficies a partir de contornos creados


Fill previamente, útiles para rellenar superficies de
manera suave.

Capaz de eliminar partes de superficies


Split
intersecada con otras.

Herramienta similar al Extrude, en la cual se


Multi-sections Surface puede elegir varias secciones y guías para
realizar la superficie.

Une diferentes superficies dando como


Join resultado una única superficie que engloba a las
demás

Tabla 10. Herramientas de superficie

La principal diferencia entre el módulo Wireframe and Surface Design y el PartDesign es que en el primero se
define y establece un HybridBody para poder acceder a las herramientas características de dicho módulo y en
el segundo se crea un árbol de trabajo y un body para poder empezar a trabajar.

58
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 59

Figura 41. Icono HybridBody

El HybridBody es un elemento representado en el árbol de trabajo como Geometrical Set, con un icono como
el de la Figura 41 que es una pequeña superfice. Este elemento es el que está dotado para el uso de las
herramientas del módulo Wireframe and Surface Design, por este motivo para poder trabajar con las
herramientas de superfice se debe escribir el Código 39 antes de empezar a realizar las operaciones.
Referencia [9]

Dim hybridBodies1 As HybridBodies


Set hybridBodies1 = part1.HybridBodies

Dim hybridBody1 As HybridBody


Set hybridBody1 = hybridBodies1.Add()

Dim hybridShapeFactory1 As HybridShapeFactory


Set hybridShapeFactory1 = part1.HybridShapeFactory
Código 39. Generar un cuerpo híbrido

En lo que sigue de este apartado, se van a explicar más detalladamente las herramientas utilizadas para el
desarrollo de este Trabajo Fin de Grado.

3.4.2.1 Fill

Esta herramienta consiste en una de las más interesantes en el paquete de superficies de CATIA ya que nos
permite crear una superficie sueve utilizando como referencia contornos creados en un sketch o intersecciones.

En el Código 40 se indica los comandos principales para usar esta herramienta.

Dim ref1 As Reference


Set ref1 = part1.CreateReferenceFromObject(sketch1)

Dim Fill As HybridShapeFill


Set Fill = hybridShapeFactory1.AddNewFill
Fill.AddBound ref1

hybridBody1.AppendHybridShape Fill
part1.InWorkObject = Fill

Código 40. Herramienta HybridShapeFill

Para el correcto funcionamiento del HybridShapeFill es necesario definir la referencia de los bordes de la
superficie mediante AddBound, en caso de usar otros sketches o más referencias como contorno se
introducirán de la misma manera. Es decir, primero creando una referencia y posteriormente con AddBound.
Finalmente se nombra el hybridBody1 creado anteriormente como Fill. En el ejemplo expuesto en el Código

59
60
Herramientas de programación de perfiles y alas

40 el contorno solo viene definido por un sketch. Referencia [9]

3.4.2.2 Multi-sections Surface

Con la herramienta Multi-sections Surface se puede realizar una supercie que vaya variando el perfil a lo largo
de la misma, esto se consigue aportado a la herramienta diferentes perfiles en diferentes secciones y una o
varias guías a través de la cual se realiza la extrusión. Los perfiles y las guías pueden ser líneas creadas en el
mismo plano 3D o un Sketch.

Dim hybridShapeLoft1 As HybridShapeLoft


Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft()

hybridShapeLoft1.SectionCoupling = 1
hybridShapeLoft1.Relimitation = 1
hybridShapeLoft1.CanonicalDetection = 2

Dim reference268 As Reference


Set reference268 = part1.CreateReferenceFromObject(hybridShapeLinePtPt1)
hybridShapeLoft1.AddGuide reference268

Dim reference269 As Reference


Set reference269 = part1.CreateReferenceFromBRepName
("WireREdge:(Wire:(Brp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithPermanentBody;Without
BuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch1)
hybridShapeLoft1.AddSectionToLoft reference269, 1, Nothing

Dim reference270 As Reference


Set reference270 = part1.CreateReferenceFromBRepName
("WireREdge:(Wire:(Brp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPermanentBody;WithoutBu
ildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", sketch2)
hybridShapeLoft1.AddSectionToLoft reference270, 1, Nothing

body1.InsertHybridShape hybridShapeLoft1
part1.InWorkObject = hybridShapeLoft1
part1.Update

Código 41. Multi-sections Surface

Como podemos ver en el Código 41, en este caso se activa y establece la herramienta en primer lugar para
posteriormente crear y establecer las referencias que se usaran como guías y secciones las cuales se incluyen a
la herramienta Multi-sections Surface, realizando en las último lugar la carga y actualización del cuerpo sobre
el que se está trabajando la operación realizada.

60
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 61

3.4.2.3 Join

El comando Join resulta muy interesante, ya que permite transformar más de una superficie en una sola, lo
cual es de gran utilidad para:

 Transformar la superficie resultante del Join en un sólido macizo ya sea usando Thick Surface o
Close Surface.

 Añadir un material a toda la superfice.

 Exportar dicha superfice como una única a otros programas, ahorrándote establecer las constraints
para unirlas.

En el Código 42 se puede observar que en la herramienta Join se necesitan como argumentos dos referencias,
las cuales se corresponden con las superficies que se quieren unir.

‘Unimos dos superficies cualquiera, en este caso un extrude y un fill

Dim refj1 As Reference


Set refj1 = part1.CreateReferenceFromObject(Fill1)

Dim refj2 As Reference


Set refj2 = part1.CreateReferenceFromObject(Extrude1)

Dim Join As HybridShapeAssemble


Set Join = hybridShapefactory1.AddNewJoin(refj1, refj2)

hybridBody1.AppendHybridShape Join
part1.InWorkObject = Join
part1.Update

Código 42. Unión de dos superficies

Si el Join que se desea realizar contiene más de dos superficies, se debe repetir el Código 43 para cada
superficie que se desea agregar al Join antes de las últimas líneas del Código 42. Referencia [9]

Dim refj3 As Reference


Set refj3 = part1.CreateReferenceFromObject(Fill2)
hybridShapeAssemble1.AddElement refj3

Código 43. Añadir superfices al Join

3.4.2.4 Symmetry

Al igual que en el módulo PartDesign, en el módulo Wireframe and Surface Design también se dispone de
una herramienta para realizar operaciones de simetría con la diferencia de que en este módulo con la misma
herramienta podemos realizar las operaciones que se realizan con el Mirror y el Symmetry en el otro módulo.
Además, para poder realizar esta operación, se necesitan dos referencias. Éstas son:
61
62
Herramientas de programación de perfiles y alas

1. El plano de simetría.

2. El objeto al que se le va a aplicar dicha simetría.

Como podemos observar, a diferencia de las herramientas del PartDesign, aquí si puedes decidir a que objetos
se le realiza la simetría. En el Código 44 se ilustra un ejemplo de cómo realizar esta operación.

Dim reference279 As Reference


Set reference279 = part1.CreateReferenceFromObject(hybridShapeAssemble1)
Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit
Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
Dim reference280 As Reference
Set reference280 = part1.CreateReferenceFromObject(hybridShapePlaneExplicit2)
Dim hybridShapeSymmetry1 As HybridShapeSymmetry
Set hybridShapeSymmetry1 = hybridShapeFactory1.AddNewSymmetry(reference279, reference280)
hybridShapeSymmetry1.VolumeResult = False
body1.InsertHybridShape hybridShapeSymmetry1
part1.InWorkObject = hybridShapeSymmetry1

Código 44. Symmetry

3.5 KNOWLEDGEWARE

El módulo Knowledgeware es la herramienta de parametrización de CATIA la cual es indispensable para la


ejecución del presente proyecto.

A lo largo de este apartado se va a explicar como se utilizan en la programación de macros las herramientas
explicadas con anterioridad en el apartado 1.5. que pertenecen al submódulo Knowledge Advisor que esta
dentro del módulo Knowledgeware.

3.5.1 Parámetros
Como ya sabemos existen infinidad de tipos de parámetros (integradores, variables, constantes de longitud,
constantes de volumen…). CATIA los engloba todos en un mismo esquema, el de los Parameters, sea cual sea
el tipo de parámetro del que se trate.

Para crear, chequear o borrar un parámetro es preciso utilizar los comandos del Código 45.

Dim part1 As document


Set part1 = CATIA.ActiveDocument
Dim parameters1 As Parameters
Set parameters1 = part1.Part.Parameters

Código 45. Parameters

62
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 63

Como se puede ver, para empezar a aplicar la herramienta en CATIA, se debe activar el documento que está
abierto (a de ser CatPart) y posteriormente se entra en los parámetros refiriéndose a ellos con la orden
Parameters. El esquema al que se ciñe CATIA es el mostrado en Figura 42.

Figura 42. Esquema de parámetros

Los Scripts del módulo de parametrización sólo son utilizables en un documento CATPart, así que cualquier
código deberá asegurar ese carácter del documento activo para así ahorrar errores posteriores.

Como se comentó anteriormente, existen multitud de tipos de parámetros, pero para la ejecución de este
proyecto solo han sido necesarios dos tipos:

1. Integer: que no tiene unidades, simplemente contiene un valor.

2. Dimension: que a parte de contener un valor dicho valor va a tener unas unidades específicas, las que
nosotros queramos. De este tipo solo se utilizarán los de longitud, en mm, y ángulo, en deg.

El comando a utilizar para la creación del parámetro dependerá del tipo de parámetro que queramos crear, para
crear los que se utilizan en la macro desarrollada se debe seguir los comandos que aparecen en el Código 46.

63
64
Herramientas de programación de perfiles y alas

Dim NACA34T As Parameter


Set NACA34T = parameters.CreateInteger("NACA34T", 0)
Dim Cuerda As Parameter
Set Cuerda = parameters.CreateDimension("Cuerda", "LENGTH", 0)
Dim Incidencia As Parameter
Set Incidencia = parameters.CreateDimension("Incidencia", "ANGLE", 0)

Código 46. Creación de parámetros

En el Código 46 se crea un parámetro del tipo Integer y dos del tipo Dimension, uno de longitud y otro de
ángulo. Como se puede observar después del comando utilizado para la creación del parámetro se debe incluir
entre paréntesis y comillas el nombre que tendrá en CATIA, la dimensión (si es del tipo Dimension) y el valor
inicial que tendrá este.

En la macro desarrollada el valor del parámetro que se crea será un dato de entrada, de hecho, todos los datos
de entrada serán parámetros, así que a continuación se va a explicar como se consigue asignar un valor de
entrada a un parámetro.

En el Código 47 se puede ver que el dato de entrada se introduce a través de un TextBox previamente colocado
en la interfaz con el usuario. El valor escrito en el TexBox se asigna a una variable para posteriormente
introducir el valor de dicha variable al parámetro a través de la orden .Value.

NACA1Valor = TextBox1
NACA1.Value = NACA1Valor

Código 47. Asignación de un valor a un parámetro

Algunas veces, un parámetro no puede tener cualquier valor, si no que debe estar dentro de un margen. Por
ejemplo, en nuestro caso, el parámetro NACA1 es el primer dígito del perfil NACA por lo que solo puede ser
un número del 0 al 9. Observando esto, resultaría interesante implementar un trozo de código que compruebe
que dicho parámetro esta dentro del margen al principio del código de forma que si el valor introducido esta
fuera del margen para el que ha sido creado se pare el programa y no se produzca ningún error en su ejecución.
Para ello se introduce el Código 48 que simplemente consiste en un sencillo condicional que comprueba el
valor y al cual se le ha añadido un mensaje de advertencia el cual le saldrá al usuario si el valor introducido es
erróneo consiguiendo de esta forma que el usuario pueda identificar rápidamente en que valor introducido se
ha equivocado ya que en la macro desarrollada existen varios. Referencia [9]

If NACA1Valor > -1 And NACA1Valor < 10 Then


Else
MsgBox "El valor introducido en NACA 1 en perfil encastre debe estar comprendido entre 0 y 9."
End ' Este End se pone para parar el programa si se encuetra el error
End If

Código 48. Comprobación del valor de los parámetros

64
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 65

3.5.2 Fórmulas

Las fórmulas tal y como se vió en el apartado 1.5.3 son un enclave fundamental en la parametrización. A
continuación en la Figura 43 se muestra un esquema de las herramientas referentes a Relations, fórmulas, en el
que se puede ver de donde cuelga cada uno de los comandos que se usan en este módulo. Además, en la Figura
42 se obseva que las fórmulas cuelgan de parámetros, es decir, que antes de introducir cual fórmula se deberá
asociar a un parámetro. Posteriormente CATIA muestrará la relación en el árbol tal como se vió previamente y
trabajará con el resultado.

Figura 43. Esquema Relations

Para activar las fórmulas se deberá escribir previamente el Código 49 para poder trabajar con ellas.

Dim parameters As parameters


Set parameters = part1.parameters
Dim relations As relations
Set relations = part1.relations

Código 49. Relations

Como bien se sabe se puede relacionar parámetros y restricciones con fórmulas. Para la realización de este
trabajo, lo que se requiere es de relacionar constraints con fórmulas que contengan los parámetros, por este
mótivo solo vamos a explicar este último. Para ello se debe seguir los siguientes pasos:

1. Crear los parámetros necesarios para la fórmula, los cuales se crean siguiendo el procedimiento ya
explicado en el apartado 3.5.1.

2. Crear la constraint a la cual queremos vincular la fórmula siguiendo el procedimiento del apartado 3.3.

65
66
Herramientas de programación de perfiles y alas

3. Crear una variable que contenga el valor de dicha constraint.

4. Crear la fórmula y vincularla a la variable anterior.

Se debe tener especial cuidado en que el parámetro y la constraint creada tengan las mismas unidades ya que si
estas no coinciden la macro no se ejecutará correctamente.

En el Código 50 se ilustra un ejemplo de los pasos a llevar a cabo para la creación de dos fórmulas con
distintas unidades, la primera en milímetros y la segunda en grados. Por último, en dicho código se ha omitido
la parte donde se crea los parámetros y se establece las referencias.

Dim constraint2 As Constraint


Set constraint2 = constraints1.AddBiEltCst(catCstTypeDistance, reference3, reference4)
constraint2.Mode = catCstModeDrivingDimension
Dim length2 As Length
Set length2 = constraint2.Dimension
Dim formula2 As Formula
Set formula2 = relations.CreateFormula("Punto borde de ataque", "Borde de ataque", length2, "Cuerda")
Dim constraint3 As Constraint
Set constraint3 = constraints1.AddBiEltCst(catCstTypeAngle, reference5, reference2)
constraint3.Mode = catCstModeDrivingDimension
constraint3.AngleSector = catCstAngleSector0
Dim angle3 As Angle
Set angle3 = constraint3.Dimension
Dim formula3 As Formula
Set formula3 = relations.CreateFormula("Linea referencia vertical Incidencia", "Incidencia", angle3,
"Incidencia")

Código 50. Crear fórmula

La orden utilizada para crear una fórmula es .CreateFormula seguida de unos paréntesis donde se incluye toda
la información sobre la relación. Dentro de los paréntesis la lógica a seguir es: ("Nombre en el árbol",
"Comentarios", constraint/parámetro relacionado, "fórmula en sí"). Los comentarios escritos se mostrarán
cuando seleccionemos con el puntero la fórmula sobre el árbol, estos pueden ser textos explicativos o bien
indicativos para próximos pasos. Referencia [9]

3.5.3 Reglas

La herramienta Rule al igual que la herramienta Formula están contenidas en Relations que a su vez está
contenida en Parameters tal y como se puede ver en la Figura 42 y la Figura 43. Es decir, que antes de
introducir una regla también se deberá asociar un parámetro, esto se consigue implementando las líneas de
código que aparecen en el Código 49. Posteriormente CATIA mostrará las reglas en el árbol dentro de la
pestaña Relations junto a las fórmulas como se muestra en la Figura 44.

66
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 67

Figura 44. Vista del módulo Relations en el árbol

Para crear una Rule se procede de forma similar a una fórmula. En el Código 51 se puede ver que tenemos que
escribir para poder hacerlo.

Dim rule1 As Rule


Set rule1 = relations.CreateProgram("rule1", "", "")

Código 51. Crear una Rule

Como se puede apreciar, en este caso se hace uso de la orden .CreateProgram seguida de unos paréntesis que
contienen en primer lugar el nombre de la Rule, en segundo lugar los comentarios y en tercer lugar la rule en
sí.

En el caso de este proyecto la regla creada es tan larga que se opta por dejar el hueco de la rule en blanco y
escribir la regla en sí en otra línea de código. Además, es importante destacar que el lenguaje de programación
que se esta usando no permite escribir la cantidad de argumentos que se quiera dentro de la regla, si no que
este número está limitado por la cantidad de bits del propio lenguaje.

rule1.Modify "/*Rule created by Francisco Javier Jiménez Calvo*/" & vbCrLf & _
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))" & vbCrLf & _
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.37\Offset =
(Cuerda+((NACA1/100)*(20/1000*Cuerda)*(2*(NACA2/10)-
20/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/10)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.37\Offset = (Cuerda+((NACA1/100)*(Cuerda-20/1000*Cuerda)*(-
2*(NACA2/10)+20/1000+1)/(1-NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.1260*(20/1000)-0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1-(NACA2/10))**2)*((NACA2/10)-(20/1000)))))"

Código 52. Orden Modify

En el Código 52 se enseña como se añade una regla a la Rule. Además, se observa un par de cosas que es
importante que se comprendan para el correcto funcionamiento de esta herramienta:

67
68
Herramientas de programación de perfiles y alas

1. Todo lo que vaya escrito entre comillas es lo que irá dentro de la Rule.

2. Al final de cada línea (sin contar la última) se escribe & vbCrLf & _ para poder continuar escribiendo
en la línea de abajo y que dicha línea aparezca también en la línea de abajo dentro de la Rule.

Con todo esto, el aspecto que presentará la Rule creada es el que aparece en la Figura 45.

Figura 45. Rule Editor

68
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
69
alas NACA de 4 dígitos

4 APLICACIÓN: ENTORNO DE PROGRAMACIÓN

Cuando hay una tormenta los pajaritos se esconden,


pero las águilas vuelan más alto.
- Mahatma Gandhi -

E n este capítulo se van a desarrollar los procedimientos que se han llevado a cabo para programar el
diseño de perfiles y alas parametrizadas con nomenclatura NACA de 4 dígitos.

En primer lugar se crea el formulario principal del programa el cual permite elegir entre las opciones de crear
un perfil, crear un ala o salir del programa. En la Figura 46 se puede ver una imagen de este formulario.

Figura 46. Interfaz principal del programa

En la interfaz principal aparecen tres CommandButton: “Crear Perfil”, “Crear Ala” y “Salir”. Los
CommandButton “Crear Perfil” y “Crear Ala” están programados para que cuando se haga click sobre ellos, el
programa abra automáticamente el formulario correspondiente a la opción seleccionada. Para ello se utiliza el
Código 53. Por el contrario, el CommandButton “Salir” esta programado para parar y cerrar la ejecución del

69
70
Aplicación: entorno de programación

programa, esto se consigue implementando el Código 54.

Private Sub CommandButton1_Click()

Load NombreUserform
Unload Me
NombreUserform.Show

End Sub
Código 53. Llamada a los UserForms con un CommandButton

Private Sub CommandButton1_Click()

Unload Me

End Sub
Código 54. Salir del programa con un CommandButton

En la Figura 47 se puede ver el UserForm asociado al CommandButton “Crear Perfil” y el asociado al


CommandButton “Crear Ala”. Como se puede ver en ambos UserForm aparece un CommandButton llamado
“Atrás” el cual esta programado para que al hacer click sobre él se vuelva a abrir automáticamente el
formulario principal del programa desarrollado. Apareciendo de esta forma un flujo de llamadas entre los
distintos formularios. Este flujo también se puede ver en la Figura 47.

Figura 47. Flujo UserForms

70
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 71

4.1 Parámetros de entrada en los UserForms

Dentro de los correspondientes UserForms para la creación de un perfil o ala parametrizada con nomenclatura
NACA de 4 dígitos, lo primero que se debe hacer es introducir los valores de los parámetros necesarios de
forma manual por lo que se incluye un TextBox dentro del UserForm para cada parámetro que se necesita.
Estos TextBoxs se agrupan en diferentes en diferentes Frames para distinguir a que afecta el parámetro que
estamos introduciendo. Además, junto al TextBox se introduce a la izquierda del mismo el nombre del
parámetro y el rango de aplicación , si lo tiene, con un Label y a la derecha las unidades, en el caso de que las
tuviese, con otro Label. En la Figura 48 y la Figura 49 se puede ver más claramente de lo que se está hablando.

Figura 48. Parámetros formulario Crear Perfil

Figura 49. Parámetros formulario Crear Ala

Aún teniendo el rango de aplicación en la interfaz del usuario, es posible cometer el error de introducir algún
dato fuera de rango. Por este motivo, se ha programado un aviso de error de forma que el programa sea capaz
de avisar de que se ha cometido un error introduciendo algún parámetro con un mensaje en una ventana
emergente donde comunica que parámetro se ha introducido mal y te vuelve a recordar el rango de operación
del mismo. Cómo introducir este tipo de mensajes se explicó en el apartado 3.5.1. En la Figura 50 se muestra
la ventana emergente de uno de los avisos programados donde al pulsar el botón aceptar, el programa se parará
y cerrará por lo que si se quiere volver a realizar alguna operación se deberá volver a ejecutar el programa
desde el principio.

71
72
Aplicación: entorno de programación

Figura 50. Mensaje de error

4.2 Estructura de la Aplicación

Para la creación de los perfiles y alas con nomenclatura NACA de 4 dígitos se incluye dentro de cada
CommandButton de los formularios correspondientes las líneas de código necesarias para realizar con éxito la
operación requerida.

En los Anexos del 2 al 9 se encuentran todas las líneas de códigos necesarias para la correcta ejecución del
programa estructuradas por bloques. La decisión de estructurar el código por bloques radica en que las
operaciones que se realizan al comienzo de la mayoría de las opciones posibles son las mismas, por lo que en
vez de adjuntar el código del programa completo, el cual ocuparía muchísimo espacio, se hizo por bloques. En
la Tabla 11 se puede ver una estructura jerarquizada del programa desarrollado junto con los anexos que
incluyen las diferentes opciones finales.

CommandButton Frame CommandButton Código

Crear perfil - Crear Perfil Anexo 2

Crear Semiala Izquierda Anexo 3


Anexo 4

Ala en Superficie Crear Semiala Derecha Anexo 3


Anexo 5

Crear Ala Anexo 3


Anexo 6
Crear Ala
Crear Semiala Izquierda Anexo 3
Anexo 7

Ala Sólida Crear Semiala Derecha Anexo 3


Anexo 8

Crear Ala Anexo 3


Anexo 9

Tabla 11. Estructura jerarquizada del programa

72
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 73

4.3 Estructura del Código

Como bien se comenta en el apartado anterior, el código del programa se adjunta por bloques en el ANEXO
del presente trabajo pero en la aplicación no, las líneas de código que se repiten en los distintos
CommandButton deben estar repetidas dentro de cada uno de ellos. Sin embargo, CATIA permite crear
módulos que almacenan una operación para que no se tenga que repetir las líneas de código de dicha operación
si ésta se repite constantemente a lo largo del código de forma que solo se tenga que hacer una llamada al
Module en la parte del código donde se quiere que se realice la operación. Esto solo es posible cuando se
trabaja con un tipo de variable fija pero como en la aplicación desarrollada se utilizan variables de tipo variable
como los parámetros, no es posible agrupar todo el ANEXO 3, que es el que se repite, en un Module, teniendo
que escribir todas las líneas de código dentro de cada CommandButton.

Dentro de cada ANEXO perteneciente al código de la aplicación, contiene líneas de código que realizan
diferentes operaciones. A continuación se va a comentar que operaciones incluye cada uno.

 ANEXO 2 → Contiene todas las líneas de código necesarias para la creación de un perfil NACA de 4
dígitos 2D. Para ello se ha programado el procedimiento que se desarrolló en el apartado 1.6, salvo
algunas diferencias que se comentan al final de este apartado, haciendo uso de las herramientas
explicadas en la sección 3. En la Figura 51se puede ver un ejemplo del resultado de crear un perfil.

Figura 51. Ejemplo del resultado final de crear un perfil

 ANEXO 3 → Contiene las líneas de código de parte de las operaciones necesarias para crear un ala.
Dentro de él se tiene el código de las operaciones donde se crea tanto el perfil del encastre como el de
la punta del ala así como la línea que une todo los bordes de ataque del ala. Este ANEXO representa la
estructura principal para crear un ala ya que una vez realizada estas operaciones ya solo quedará
extruir los perfiles utilizando la línea de borde de ataque como guía. El resultado de ejecutar
solamente estas líneas de código y no el programa completo es el representado en la Figura 52.

73
74
Aplicación: entorno de programación

Figura 52. Resultado de ejecutar el ANEXO 3

 ANEXO 4 y 7 → Contiene las líneas de código necesarias para crear la semiala izquierda en
superficie y sólida respectivamente. En ambos ANEXOS se tiene prácticamente el mismo código, la
mayor diferencia es que en el ANEXO 7 se incluye la operación Close Surface para convertir la
semiala, que al principio estará en superficie, en sólida. Esto es así ya que como se explicó en el
apartado 1.6 resulta conveniente realizar todas las operaciones posibles dentro del módulo Wireframe
and Surface Design realizando en último lugar las operaciones correspondientes al módulo Part
Design que no se hayan podido realizar en el anterior módulo. En este caso solo se utiliza la
herramienta Close Surface de dicho módulo. En la Figura 53 se puede ver un ejemplo del resultado
final de crear una semiala izquierda. Dicho resultado es aparantemente el mismo para semialas en
superficie y sólidas, la única diferencia entre ambas es que una esta hueca y la otra no.

Figura 53. Ejemplo del resultado final de crear una semiala izquierda

74
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 75

 ANEXO 5 y 8 → Contiene las líneas de código necesarias para crear la semiala derecha en superficie
y sólida respectivamente. Ambos ANEXOS son prácticamente iguales, en ambos se utiliza la
programación de la creación de la semiala izquierda para obtener la semiala derecha. Esto es así ya
que durante la realización de la aplicación se obtuvo en primer lugar la semiala izquierda. A
continuación se van a comentar las mayores diferencias que existen entre ambos ANEXOS.

1. En el ANEXO 8, al igual que en el ANEXO 7 anteriormente y por el mismo motivo, se incluye la


operación Close Surface para convertir la semiala, que al principio estará en superficie, en sólida.

2. Las operaciones de simetría son distintas en cada caso ya que cada módulo, Wireframe and
Surface Design y Part Design respectivamente, contiene una herramienta de simetría distinta
como se vio en el apartado 3.4. Además, se tiene que tener cuidado al utilizar la simetría dentro
del módulo Part Design ya que a diferencia del otro módulo, en este existe diferentes
herramientas en función del resultado final que se quiera obtener. Para este caso se elige la
herramienta que te permite quedarte solamente con la semiala simétrica a la que se ha diseñado,
ocultando esta última. En el caso de la simetría en superficie tan solo basta indicar que resultado
final se quiere tener, si ambas partes, la diseñada y la simétrica, o solo la simétrica.

En la Figura 54 se puede ver un ejemplo del resultado final de crear una semiala derecha. Al igual que
antes, dicho resultado es aparantemente el mismo para semialas en superficie y sólidas, la única
diferencia entre ambas es que una esta hueca y la otra no.

Figura 54. Ejemplo del resultado final de crear una semiala derecha

 ANEXO 6 y 9 → Contiene las líneas de código necesarias para crear la ala completa en superficie y
sólida respectivamente. Estos códigos son prácticamente iguales a los de los ANEXOS 5 y 8
respectivamente, la única diferencia entre ellos es a la hora de realizar la simetría.

75
76
Aplicación: entorno de programación

- En la ala en superficie la operación de simetría es la misma que en el ANEXO 5 pero en este caso
no se debe ocultar la semiala izquierda y después de realizar esta operación se debe hacer un Join
que incluya ambas semialas para formar una sola ala.

- En la ala sólida la operación de simetría es distinta que en el ANEXO 8 ya que en este caso se
debe utilizar la operación que nos permite quedarnos con ambas semialas y no la simetrica a la
que se realiza la operación.

En la Figura 55 se puede ver un ejemplo del resultado final de crear un ala. Como en los casos
anteriores, dicho resultado es aparantemente el mismo para alas en superficie y sólidas, la única
diferencia entre ambas es que una esta hueca y la otra no.

Figura 55. Ejemplo del resultado final de crear un ala

Ahora se va a proceder a mencionar que cosas se realizan de forma diferente al apartado 1.6 donde se explicó
los pasos a seguir para crear un perfil y un ala parametrizada con nomenclatura NACA de 4 dígitos.

En primer lugar, para la creación únicamente de un perfil, la semienvergadura del ala no es un dato de entrada,
por lo que el punto del borde de ataque se coloca a una longitud y altura igual a la cuerda del perfil en vez de a
la semienvergadura. Esto no conllevará posibles problemas ya que en este caso, al no tratarse de un ala, no hay
que parametrizar ni el diedro ni la flecha, razón por la cual se decidió poner el borde de ataque a tal distancia.

En segundo lugar, a la hora de programar, como bien vimos en el apartado 3.2.3, antes de crear un Spline se
debe crear los ControlPoints a través de los cuales se definirá la curva, por lo que en el programa desarrollado
lo que se hace es crear y acotar los ControlPoints en vez de crear y acotar los puntos con los que
posteriormente se creaba el Spline. De esta forma se ahorra gran parte del trabajo para dibujar el perfil ya que

76
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 77

si no tendríamos que definir en vez de 60 puntos de control, 120 de los cuales la mitad serían puntos y la otra
mitad puntos de control. Sin embargo, el punto que define el borde de ataque si se ha creado como punto y
como punto de control, ya que el primero nos hace falta para poder definir las líneas de referencia y la línea
que une todos los bordes de ataque del ala.

Tal y como se comento en el apartado 3.5.3, en el lenguaje de programación que se esta usando no se permite
escribir la cantidad de argumentos que se quiera dentro de una regla, si no que el número de argumentos está
limitado por la cantidad de bits del propio lenguaje. Por este motivo no se puede crear una Rule que contenga
todas las líneas de código necesarias para dibujar el perfil, de hecho, el programa soporta poco mas de una
regla para definir las Constraints de un punto. Por esta razón en el código del programa se crea una Rule por
cada ControlPoint haciendo un total de 60 reglas para crear un perfil y 120 para un ala.

Para finalizar esta sección, se ha diseñado un diagrama de flujo de la aplicación el cual podemos ver en la
Figura 56 que se encuentra en la pagina 78. En él se puede visualizar a grandes rasgos todo lo explicado en
esta sección de como funciona la aplicación desarrollada en este Trabajo Fin de Grado.

77
78
Aplicación: entorno de programación

Figura 56. Diagrama de flujo de la aplicación

78
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
79
alas NACA de 4 dígitos

5 APLICACIÓN PERFILES Y ALAS CON


NOMENCLATURA NACA DE 4 DÍGITOS:
MANUAL DE USUARIO

Sabemos lo que somos pero no lo que podemos llegar a ser.


- William Shakespeare -

U na vez explicado el software desarrollado para realizar perfiles y alas con nomenclatura NACA de 4
dígitos. A continuación se procede a explicar los pasos que debe seguir el lector para el uso del mismo.

Antes de empezar a trabajar con la aplicación, el usuario debe asegurarse que tiene activado la visualización de
parámetros y relaciones en CATIA. Si no se tiene activada, se debe ir al ANEXO 1 donde se desarrolla el
procedimiento a seguir para su activación.

Para comenzar a usar la aplicación, el usuario debe arrancar CATIA si aún no lo ha hecho. Cuando CATIA se
haya cargado, se debe ir a la pestaña Tools de la barra de herramientas y acceder a la opción Macros → Visual
Basic Editor.

Una vez abierta la interfaz de VBA, el siguiente paso es arrancar la macro, para eso se debe hacer click sobre
el formulario “VentanaPrincipal” y reproducirla dándole al botón Play de la barra de herramientas abriéndose
la ventana de la Figura 57.

En la ventana principal se da opción a crear un perfil, crear un ala o salir del programa. Para ello hay tres
botones: “Crear Perfil”, “Crear Ala” y “Salir” respectivamente. Si se hace click sobre uno de los dos primeros,
se abrirá otra ventana correspondiente a dicha opción y si se pulsa “Salir” la aplicación se parará y cerrará.

79
80
Aplicación perfiles y alas con nomenclatura NACA de 4 dígitos: manual de usuario

Figura 57. Interfaz principal de la aplicación

A continuación se va a hablar de las opciones “Crear Perfil” y “Crear Ala”. Si se hace click sobre alguna de
estas, aparecerá la ventana de la Figura 58 en el caso de haber elegido la opción de crear un perfil o la ventana
de la Figura 59 si se ha elegido la de crear una ala. Si por casualidad el usuario se ha equivocado de operación
en la ventana principal, tan solo tiene que pulsar el botón “Atrás” que se incluye en ambos formularios para
volver a la ventana principal del programa.

Figura 58. Interfaz PerfilesNACA4Digitos

80
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 81

Figura 59. Interfaz AlaNACA4Digitos

Ya dentro de la interfaz para crear un perfil o una ala se debe rellenar todos los parámetros que se piden. Para
facilitar la entrada de dichos parámetros en la misma interfaz se puede ver el rango de aplicación que tienen los
mismos y las unidades, si las tiene. El dato introducido en el parámetro debe estar comprendido en el rango de
aplicación del mismo para que el programa pueda funcionar. A lo largo del apartado 1.6 de este trabajo se
detalla y explica que significa cada parámetro y como afecta a la geometría del perfil o el ala que se pretende
diseñar.

Una vez se tenga todos los valores de los parámetros introducidos, el siguiente paso es hacer click sobre la
operación que se quiera ejecutar. Una vez pulsado el botón si nos hemos equivocado introduciendo algún
parámetro y éste se encuentra fuera del rango permitido, el programa lanza un mensaje de advertencia y para el
programa tal y como explicó en el apartado 4.1. En caso de que se hayan introducido correctamente todos los
parámetros el programa al terminar de ejecutarse el programa, éste se cerrará y tendremos en CATIA un
archivo .CATPART que contiene el perfil o ala creada.

5.1 Uso posterior a la aplicación

Durante todo el Trabajo Fin de Grado se habla de la parametrización, esto se debe a la gran importancia que
tiene sobre este proyecto ya que uno de los fines para los que se ha diseñado esta aplicación es para que, una
vez ejecutada la misma, se pueda realizar cambios sobre el perfil o ala diseñada con tan solo modificar el valor
de los parámetros creados con la aplicación los cuales aparecerán en el árbol de trabajo una vez ejecutado el
programa.
81
82
Aplicación perfiles y alas con nomenclatura NACA de 4 dígitos: manual de usuario

A partir del momento en el que se trabaje directamente sobre el entorno de CATIA, se debe tener cuidado con
las modificaciones que se realiza sobre la geometría, ya que ahora no existe ningún ninguna imposición sobre
estos y se excede demasiado el rango de aplicación empezarán a salir mensajes de error al actualizar CATIA.
El bóton de actualizar de CATIA es el que se muestra en la Figura 60.

Figura 60. Botón actualizar de CATIA

Respecto a los rangos de aplicación de la macro, cualquier persona con conocimientos básicos de la
aeronáutica se daría cuenta de que estos son muy amplios, abarcando prácticamente todos los casos, por no
decir todos, que se pueden encontrar en el mercado actualmente. Aunque si el usuario final requiriese
aumentar dicho rango por cualquier motivo, existe una posibilidad. Lo que se debe hacer es introducir en
primer lugar unos valores en los parámetros dentro de rango para ejecutar la aplicación y una vez tengamos el
archivo donde se encuentra la operación realizada, modificar los parámetros, los cuales se encontrarán en el
árbol de trabajo del entorno de CATIA, y actualizar la geometría. Esto no funciona para todos los parámetros
ya que se ha comprobado que el ángulo de la flecha y del diedro nunca puede tener un ángulo menor de -40º.

El hecho de que se pueda aumentar los rangos de aplicación es debido a que para la creación de los puntos que
se usan para definir el perfil se introducen unas cotas arbitarias y estas cotas deben estar contenidas en las
líneas de referencia y del primer cuadrante del Sketch en cuestión, tal y como se explicó en el apartado 1.6, ya
que si quedan fuera o cambia de cuadrante, da error. Pero una vez ya este acotado y dibujado correctamente se
permite aumentar el rango de aplicación en algunos de los parámetros. De todas formas no se aconseja
sobrepasar los rangos para los que se ha establecido ya que no se sabe cuales serán los nuevos valores límites.

82
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
83
alas NACA de 4 dígitos

Conclusiones

C ATIA es un programa informático de alto nivel que viene siendo utilizado en grandes y relevantes áreas
de la ingeniería como son la aeronáutica y la automoción, ya que permite realizar tanto el diseño y el análisis
de los modelos, como la fabricación final de los mismos.

Durante la realización del proyecto, en primer lugar, se decidió aprender a usar el módulo Knowledgeware de
CATIA el cual permite el uso de párametros, fórmulas y reglas ya que resulta vital saber usarlo para la
realización de la aplicación.

El segundo paso fue generar perfiles y alas parametrizadas de forma manual para asimilar el procedimiento
que se debía seguir, que no resultó ser trivial. Para ello se empezó parametrizando perfiles donde se cometió el
primer gran error, no tener ningún cuidado al acotar los puntos con los que se dibujaría el perfil, ya que
posteriormente a cada cota va asocidada un conjunto de ecuaciones y si éstas no han sido acotadas siguiendo
una lógica resulta ser un quebradero de cabeza ya que la regla que define el perfil requiere del número de cota
y por cada perfil había alrededor de 130 constraints distintas. El segundo gran problema que se encontró fue
que CATIA no entiende de distancias negativas en las cotas y había puntos con coordenadas negativas. Dicho
problema se solucionó sumándole un offset a las coordenadas en altitud de forma que todas éstas resultansen
positivas. Pero no bastaba cualquier offset, éste debía ser bastante grande si se quería poder poner un diedro
negativo al ala.

Al final del proyecto se tuvieron problemas para parametrizar la flecha del ala, ya que de la forma en que se
estaba realizando la parametrización no permitía establecer una flecha negativa, esto se solucionó sumando
también un offset a las cotas en longitud. Descubriendo que los límites de operación de la aplicación se
alcanza cuando algún punto cambia de cuadrante debido a que alguna de las coordenada del punto se hace
negativa. Por este motivo se decidió sumerle un offset a las cotas en longitud y altura para alejar dichas cotas
de los extremos del cuadrante y además se decidió que dicho offset debía tener el valor mas alto posible el cual
normalmente sería la cuerda cuando solo se diseñan perfiles y la semienvergadura cuando se diseñan alas.

En lo referente a la programación en VBA de la aplicación, se pasó por diferentes etapas. Al inicio del
proyecto no se tenía conocimiento alguno del lenguaje de programación ni del entorno. Dicho conocimiento se

83
84
Conclusiones

adquirió durante la ejecución del proyecto para la posible realización de la aplicación y resultó no ser un
proceso fácil ya que existe muy poca bibliografía sobre programación en CATIA. Por este motivo, la mayor
parte de la programación del trabajo está basada en un libro aún en edición de la tutora del proyecto, pudiendo
solventar de esta forma dicha carencia.

En el proceso de aprendizaje del lenguaje de programación se empezarón a desarrollar en primer lugar


aplicaciones sencillas, incrementando el nivel de dificultad poco a poco hasta que se creyó que se tenían los
conocimientos básicos necesarios para empezar a programar una aplicación propia.

Una vez se empezó a programar la aplicación del proyecto, se fue programando por pasos el procedimiento
desarrollado para parametrizar perfiles y alas encontrando mas ausencia de información sobre operaciones
avanzadas como era la utilización de Rules.

Es importante mencionar que llegados a cierto punto del proyecto se tuvieron dos líneas paralelas de trabajo
que iban cogidas de la mano, la parametrización manual del perfil y de la ala y la programación de la
aplicación debido a que un cambio en la parametrización incurria a un cambio en el código del programa y se
tuvieron que ir implementado mejoras ya que se encontró algún que otro fallo en la parametrización que se
estaba haciendo.

Finalmente, no solo se ha obtenido una macro para CATIA programada en VBA para generar perfiles y alas
con nomenclatura NACA de 4 dígitos, sino que, además, dichos perfiles y alas se encuentran parametrizadas,
por lo que una vez ejecutada la aplicación se puede implementar modificaciones en la geometría con tan solo
cambiar el valor de los parámetros que definen la misma. De esta forma se consigue facilitar enormemente la
etapa de diseño donde continuamente se están realizando cambios hasta llegar a la geometría final.

En contraposición, decir que la aplicación desarrollada tiene un defecto. El tiempo de ejecución de la macro es
un poco elevado frente a otras, en torno a medio minuto. Durante su ejecución puede parecer que CATIA se
queda colgado si no se posee un ordenador potente. Esto es debido no solo a la cantidad de líneas de código
que tiene que ejecutarse para poder realizar la operación programada si no a la complejidad de las operaciones
programadas. Aún así resulta factible su utilización frente al diseño manual, el cual puede llevar hasta días
para su finalización si no se tiene conocimientos avanzados de CATIA.

84
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
85
alas NACA de 4 dígitos

Bibliografía

[1] José Manuel Gordillo Arias de Saavedra, Guillaume Riboux Acher. Introducción a la aerodinámica
Potencial.

[2] Ciencia y poder Aéreo. Web Site. 27/08/2015

[3] Geometry for Aerodynamicists. Web site. 27/08/2015

[4] Temarío Asignatura Cálculo de aeronaves del 4ºCurso de Ingeniería Aeroespacial. Tema 5.1
Introducción a los perfiles NACA. Universida de Sevilla.

[5] Damián Patón Terreno. Diseño paramétrico de un ala con perfil NACA de 4 dígitos, flecha, diedro
torsión y estrechamiento en CATIA V5 R19. Web site. 17/04/2014

[6] Eduardo Torrecillas Insagurbe. El gran libro de CATIA.

[7] Dassault Systèmes. Web Site. 27/08/2015

[8] Fundamentos del KBE (Knowledge Based Engineering). Aplicación al diseño de engranajes de
ejes paralelos con Catia v5. Proyecto Fin de Carrera.

[9] Cristina Torrecillas Lozano. Introducción a la programación Visual Basic en CATIA V5 Y V6 (no
publicado)

[10] Emmett Ross. VB Scripting for CATIA V5. Segunda edición.

[11] Dieter Ziethen. CATIA V5 Macro Programming with Visual Basic Script.

85
86
Bibliografía

86
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
87
alas NACA de 4 dígitos

Glosario

RAE: Real Academia Española


RAE: Royal Aircraft Establisment
NACA: National Advisory Committee for Aeronautics
NASA: National Aeronautics and Space Administration
CATIA: Computer-Aided Three Dimensional Interactive Application
BASIC: Beginner’s All-purpose Symbolic Instruction Code
VBA: Visual Basic for applications

87
88
Glosario

88
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
89
alas NACA de 4 dígitos

ANEXOS

ANEXO 1. ACTIVACIÓN DE PARÁMETROS Y RELACIONES EN CATIA

Para poder trabajar con fórmulas y parámetros correctamente en CATIA, este se tiene que configurar para
poder visualizarlos en el árbol de trabajo y de esta forma poder ir modificándolos. La operación de activación
que se explica a continuación solo se debe realizar una vez.

Dentro de CATIA en la pestaña Tools y se debe acceder a la opción Options. En el menú de la izquierda
desplega Infraestructure y selecciona Product Structure. Ahora ve a la pestaña Tree Customization y activa los
párametros y las relaciones. Esto se hace para poder mostrar parámetros tanto en un Product como en un Part
ya que a veces se parametriza elementos que están fuera de un Part como por ejemplo una Constraint de un
Product. En este proyecto no será necesario pero puede serlo a la hora de diseñar un avión completo. En la
Figura 61 y la Figura 62 se puede ver el procedimiento a seguir.

Figura 61. Localización Options

89
90
ANEXOS

Figura 62. Configuración Tree Customization

A continuación selecciona Part Infrastructure en la misma ventana de Options. En la pestaña General se debe
asegurar que esté marcada la opción Show newly external references. Esto sirve para poder usar parámetros de
un Part en otro Partdistinto, los parámetros de este tipo aparecerán en el árbol como External Parameters. En
este proyecto tampoco es necesario usar esta funcionalidad, pero al igual que se mencionó antes, para diseños
mas avanzados resulta de gran utilidad. En la Figura 63 se puede observar la configuración adecuada.

Figura 63. Configuración Part Infrastructure, General

Ahora dentro de la pestaña Display se tiene que asegurar que estén marcadas las opciones External References,

90
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 91

Parameters y Relations. Esto se hace para poder ver los parámetros en la pantalla y así poder modificarlos,
pero si queremos ver el valor actual y la fórmula que los definen se tiene que desplegar el menú General en la
ventana Options, seleccionar Parameters and Measure y en la pestaña Knowledge asegurar que estén
marcadas las opciones With value y With formula. En la Figura 64 y Figura 65 se observa la configuración que
debemos tener. Referencia [5]

Figura 64. Configuración Part Infraestructure, Display

Figura 65. Configuración Parameters and Measure

Una vez realizado todos los pasos explicados ya tenemos CATIA correctamente configurado.

91
92
ANEXOS

ANEXO 2. CÓDIGO PARA DIBUJAR UN PERFIL NACA DE 4 DÍGITOS

Private Sub CommandButton1_Click() Else


' Para que el programa funcione bien debemos estar trabajando MsgBox "El valor introducido en NACA1 debe estar
en un documento .CATPart y que no existan parámetros comprendido entre 0 y 9."
' que se llamen iguales a los que creamos con nuestro programa End ' Este End se pone para parar el programa
ya que entrarian en conflicto. Para evitar todos si se encuetra el error
' estos problemas vamos a hacer que este programa siempre se End If
ejecute en un nuevo documento .CATPart.
' NACA2 debe ser un número entero positivo de una cifra
' De esta forma el programa pueda arrancar sin necesidad de
tener un part abierto, de forma que al ejecutarse se If NACA2Valor > -1 And NACA2Valor < 10 Then

' abra un nuevo part de forma automática. Else

' Al crearse un nuevo part cada vez que se ejecuta el programa, MsgBox "El valor introducido en NACA2 debe estar
no es necesario comprobar que estamos trabajando con comprendido entre 0 y 9."

' archivo .CATPart ni que en dicho archivo existan ya End


parámetros que se llamen igual que los que vamos a crear End If
' ya que al ser un nuevo archivo estará totalmente vacio. ' NACA34 debe ser un número entero positivo este puede ir
' Normalmente se suele nombrar al objeto con el mismo desde el 0 al 99.
nombre de la orden seguida de un número para identificar If NACA34Valor > -1 And NACA34Valor < 100 Then
' rápidamente que estamos haciendo, esta es la lógica que Else
seguiremos en nuestro programa.
MsgBox "El valor introducido en NACA34 debe estar
' Creamos y abrimos el nuevo Part comprendido entre 0 y 99."
Dim documents1 As Documents End
Dim partDocument1 As PartDocument End If
Dim part1 As Part ' Cuerda debe ser un número entero positivo mayor que 0
Set documents1 = CATIA.Documents If CuerdaValor > 0 Then
Set partDocument1 = documents1.Add("Part") ' Se carga Else
un documento activo part para trabajar
MsgBox "El valor introducido en Cuerda debe ser mayor que
Set part1 = partDocument1.Part ' Se establece el 0."
part1 como entorno para trabajar
End
' Activamos las relaciones y parámetros
End If
Dim relations As relations
If IncidenciaValor > -0.001 And IncidenciaValor < 46 Then
Dim parameters As parameters
Else
Set relations = part1.relations
MsgBox "El valor introducido en Incidencia debe estar
Set parameters = part1.parameters comprendido entre -45º y 45º."
' Asignamos los valores introducidos a cada parámetro End
NACA1Valor = TextBox1 End If
NACA2Valor = TextBox2 ' Creamos los parámetros
NACA34Valor = TextBox3 Dim NACA1 As Parameter
CuerdaValor = TextBox4 Set NACA1 = parameters.CreateInteger("NACA1", 0)
IncidenciaValor = TextBox5 Dim NACA2 As Parameter
' Se comprueba que los valores introducidos son correctos, si Set NACA2 = parameters.CreateInteger("NACA2", 0)
estos no lo están se lanza un mesaje
Dim NACA34 As Parameter
' de advertencia y se para el programa para que los
modifiquemos y volvamos a ejecutar el programa. Set NACA34 = parameters.CreateInteger("NACA34", 0)

' NACA1 debe ser un número entero positivo de una cifra Dim Cuerda As Parameter

If NACA1Valor > -1 And NACA1Valor < 10 Then Set Cuerda = parameters.CreateDimension("Cuerda",

92
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 93

"LENGTH", 0) unidad y en el plano Z


Dim Incidencia As Parameter arrayOfVariantOfDouble1(8) = 1# ' Establece el vector
unidad z en el plano Z
Set Incidencia = parameters.CreateDimension("Incidencia",
"ANGLE", 0) Set sketch1Variant = sketch1
' Asignamos el valor correspondiente a cada parámetro sketch1Variant.SetAbsoluteAxisData
arrayOfVariantOfDouble1 'Sistema absoluto 3D para el sketch
NACA1.Value = NACA1Valor
part1.InWorkObject = sketch1
NACA2.Value = NACA2Valor
' Establecimiento del conjunto de herramientas 2D y asignarlo
NACA34.Value = NACA34Valor al sketch de trabajo
Cuerda.Value = CuerdaValor Dim factory2D1 As Factory2D
Incidencia.Value = IncidenciaValor Set factory2D1 = sketch1.OpenEdition()
' Ahora debemos crear 60 puntos, 30 para extradós y 30 para ' Se establecen los elementos geométricos
intradós
Dim geometricElements1 As GeometricElements
' Definimos el entorno de trabajo
Set geometricElements1 = sketch1.GeometricElements
Dim bodies1 As Bodies
' Se define el sistema de ejes dentro del sketch
Dim body1 As Body
Dim axis2D1 As Axis2D
Dim sketches1 As Sketches
Set axis2D1 = geometricElements1.Item("AbsoluteAxis")
Dim originElements1 As OriginElements
' Establecimiento de las direcciones horizontal y vertical
Dim reference1 As Reference
Dim line2D1 As Line2D
Dim sketch1 As Sketch
Set line2D1 = axis2D1.GetItem("HDirection")
' Establecimiento del entorno de trabajo
line2D1.ReportName = 1
Dim line2D2 As Line2D
Set bodies1 = part1.Bodies
Set line2D2 = axis2D1.GetItem("VDirection")
Set body1 = bodies1.Item("PartBody") ' Se activa el body1
como body de trabajo line2D2.ReportName = 2
Set sketches1 = body1.Sketches ' Se establece el sketch ' Definimos los puntos con unos valores distribuidos
uniformemente. Estos valores
Set originElements1 = part1.OriginElements ' Sistema de
referencia 3D ' no son los definitivos ya que estos seran modificados con la
rule.
Set reference1 = originElements1.PlaneYZ ' Se establece el
plano YZ como plano de trabajo Dim point2D1 As ControlPoint2D
Set sketch1 = sketches1.Add(reference1) ' Toma la Set point2D1 = factory2D1.CreateControlPoint(CuerdaValor,
referencia1 como referencia para trabajar CuerdaValor)
' Trabajamos en el plano yz point2D1.ReportName = 2 + 1
Dim arrayOfVariantOfDouble1(8) Dim point2D2 As ControlPoint2D
arrayOfVariantOfDouble1(0) = 0# ' Establece el vector Set point2D2 = factory2D1.CreateControlPoint(CuerdaValor,
unidad x en el plano X CuerdaValor)
arrayOfVariantOfDouble1(1) = 0# ' Establece el vector point2D2.ReportName = 2 + 2
unidad y en el plano X
Dim point2D3 As ControlPoint2D
arrayOfVariantOfDouble1(2) = 0# ' Establece el vector
unidad z en el plano X Set point2D3 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor)
arrayOfVariantOfDouble1(3) = 0# ' Establece el vector
unidad x en el plano Y point2D3.ReportName = 2 + 3

arrayOfVariantOfDouble1(4) = 1# ' Establece el vector Dim point2D4 As ControlPoint2D


unidad y en el plano Y Set point2D4 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor)
arrayOfVariantOfDouble1(5) = 0# ' Establece el vector
unidad z en el plano Y point2D4.ReportName = 2 + 4
arrayOfVariantOfDouble1(6) = 0# ' Establece el vector Dim point2D5 As ControlPoint2D
unidad x en el plano Z
Set point2D5 = factory2D1.CreateControlPoint(CuerdaValor,
arrayOfVariantOfDouble1(7) = 0# ' Establece el vector CuerdaValor)

93
94
ANEXOS

point2D5.ReportName = 2 + 5 CuerdaValor)
Dim point2D6 As ControlPoint2D point2D17.ReportName = 2 + 17
Set point2D6 = factory2D1.CreateControlPoint(CuerdaValor, Dim point2D18 As ControlPoint2D
CuerdaValor)
Set point2D18 = factory2D1.CreateControlPoint(CuerdaValor,
point2D6.ReportName = 2 + 6 CuerdaValor)
Dim point2D7 As ControlPoint2D point2D18.ReportName = 2 + 18
Set point2D7 = factory2D1.CreateControlPoint(CuerdaValor, Dim point2D19 As ControlPoint2D
CuerdaValor)
Set point2D19 = factory2D1.CreateControlPoint(CuerdaValor,
point2D7.ReportName = 2 + 7 CuerdaValor)
Dim point2D8 As ControlPoint2D point2D19.ReportName = 2 + 19
Set point2D8 = factory2D1.CreateControlPoint(CuerdaValor, Dim point2D20 As ControlPoint2D
CuerdaValor)
Set point2D20 = factory2D1.CreateControlPoint(CuerdaValor,
point2D8.ReportName = 2 + 8 CuerdaValor)
Dim point2D9 As ControlPoint2D point2D20.ReportName = 2 + 20
Set point2D9 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor)
Dim point2D21 As ControlPoint2D
point2D9.ReportName = 2 + 9
Set point2D21 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D10 As ControlPoint2D CuerdaValor)
Set point2D10 = factory2D1.CreateControlPoint(CuerdaValor, point2D21.ReportName = 2 + 21
CuerdaValor)
Dim point2D22 As ControlPoint2D
point2D10.ReportName = 2 + 10
Set point2D22 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D11 As ControlPoint2D CuerdaValor)
Set point2D11 = factory2D1.CreateControlPoint(CuerdaValor, point2D22.ReportName = 2 + 22
CuerdaValor)
Dim point2D23 As ControlPoint2D
point2D11.ReportName = 2 + 11
Set point2D23 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D12 As ControlPoint2D CuerdaValor)
Set point2D12 = factory2D1.CreateControlPoint(CuerdaValor, point2D23.ReportName = 2 + 23
CuerdaValor)
Dim point2D24 As ControlPoint2D
point2D12.ReportName = 2 + 12
Set point2D24 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D13 As ControlPoint2D CuerdaValor)
Set point2D13 = factory2D1.CreateControlPoint(CuerdaValor, point2D24.ReportName = 2 + 24
CuerdaValor)
Dim point2D25 As ControlPoint2D
point2D13.ReportName = 2 + 13
Set point2D25 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D14 As ControlPoint2D CuerdaValor)
Set point2D14 = factory2D1.CreateControlPoint(CuerdaValor, point2D25.ReportName = 2 + 25
CuerdaValor)
Dim point2D26 As ControlPoint2D
point2D14.ReportName = 2 + 14
Set point2D26 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D15 As ControlPoint2D CuerdaValor)
Set point2D15 = factory2D1.CreateControlPoint(CuerdaValor, point2D26.ReportName = 2 + 26
CuerdaValor)
Dim point2D27 As ControlPoint2D
point2D15.ReportName = 2 + 15
Set point2D27 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D16 As ControlPoint2D CuerdaValor)
Set point2D16 = factory2D1.CreateControlPoint(CuerdaValor, point2D27.ReportName = 2 + 27
CuerdaValor)
Dim point2D28 As ControlPoint2D
point2D16.ReportName = 2 + 16
Set point2D28 = factory2D1.CreateControlPoint(CuerdaValor,
Dim point2D17 As ControlPoint2D CuerdaValor)
Set point2D17 = factory2D1.CreateControlPoint(CuerdaValor, point2D28.ReportName = 2 + 28

94
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 95

Dim point2D29 As ControlPoint2D Dim point2D41 As ControlPoint2D


Set point2D29 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D41 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D29.ReportName = 2 + 29 point2D41.ReportName = 2 + 41
Dim point2D30 As ControlPoint2D Dim point2D42 As ControlPoint2D
Set point2D30 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D42 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D30.ReportName = 2 + 30 point2D42.ReportName = 2 + 42
Dim point2D31 As ControlPoint2D Dim point2D43 As ControlPoint2D
Set point2D31 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D43 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D31.ReportName = 2 + 31 point2D43.ReportName = 2 + 43
Dim point2D32 As ControlPoint2D Dim point2D44 As ControlPoint2D
Set point2D32 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D44 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D32.ReportName = 2 + 32 point2D44.ReportName = 2 + 44
Dim point2D33 As ControlPoint2D Dim point2D45 As ControlPoint2D
Set point2D33 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D45 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D33.ReportName = 2 + 33 point2D45.ReportName = 2 + 45
Dim point2D34 As ControlPoint2D Dim point2D46 As ControlPoint2D
Set point2D34 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D46 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D34.ReportName = 2 + 34 point2D46.ReportName = 2 + 46
Dim point2D35 As ControlPoint2D Dim point2D47 As ControlPoint2D
Set point2D35 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D47 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D35.ReportName = 2 + 35 point2D47.ReportName = 2 + 47
Dim point2D36 As ControlPoint2D Dim point2D48 As ControlPoint2D
Set point2D36 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D48 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D36.ReportName = 2 + 36 point2D48.ReportName = 2 + 48
Dim point2D37 As ControlPoint2D Dim point2D49 As ControlPoint2D
Set point2D37 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D49 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D37.ReportName = 2 + 37 point2D49.ReportName = 2 + 49
Dim point2D38 As ControlPoint2D Dim point2D50 As ControlPoint2D
Set point2D38 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D50 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D38.ReportName = 2 + 38 point2D50.ReportName = 2 + 50
Dim point2D39 As ControlPoint2D Dim point2D51 As ControlPoint2D
Set point2D39 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D51 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D39.ReportName = 2 + 39 point2D51.ReportName = 2 + 51
Dim point2D40 As ControlPoint2D Dim point2D52 As ControlPoint2D
Set point2D40 = factory2D1.CreateControlPoint(CuerdaValor, Set point2D52 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) CuerdaValor)
point2D40.ReportName = 2 + 40 point2D52.ReportName = 2 + 52

95
96
ANEXOS

Dim point2D53 As ControlPoint2D Set point2D62 = factory2D1.CreatePoint(CuerdaValor,


CuerdaValor)
Set point2D53 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) point2D62.ReportName = 64
point2D53.ReportName = 2 + 53 point2D62.Construction = True
' Definimos las constraints de todos los puntos acotando estos
en distancias a ambas direcciones del sketch.
Dim point2D54 As ControlPoint2D
' Debemos seguir una lógica para acotar los puntos ya que esta
Set point2D54 = factory2D1.CreateControlPoint(CuerdaValor, afectará a nuestra Rule.
CuerdaValor)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
point2D54.ReportName = 2 + 54
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim point2D55 As ControlPoint2D
''' INCIDENCIA '''
Set point2D55 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
point2D55.ReportName = 2 + 55 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim point2D56 As ControlPoint2D ' Los perfiles suelen tener una incidencia, ángulo, respecto a la
horizontal, por lo que crearemos unas nuevas
Set point2D56 = factory2D1.CreateControlPoint(CuerdaValor,
CuerdaValor) ' lineas de referencia que formen un ángulo igual a la
incedencia y posteriormente acotaremos sobre estas lineas.
point2D56.ReportName = 2 + 56
' Creamos las lineas que utilizaremos como referencia.
Dim point2D57 As ControlPoint2D
Comenzamos por la "vertical".
Set point2D57 = factory2D1.CreateControlPoint(CuerdaValor, ' En primer lugar acotamos y parametrizamos el punto del
CuerdaValor) borde de ataque.
point2D57.ReportName = 2 + 57 Dim constraints1 As constraints
Dim point2D58 As ControlPoint2D
Set constraints1 = sketch1.constraints
Set point2D58 = factory2D1.CreateControlPoint(CuerdaValor, Dim reference2 As Reference
CuerdaValor)
Set reference2 = part1.CreateReferenceFromObject(line2D2)
point2D58.ReportName = 2 + 58 'Referencia al eje vertical
Dim point2D59 As ControlPoint2D Dim reference3 As Reference
Set point2D59 = factory2D1.CreateControlPoint(CuerdaValor, Set reference3 = part1.CreateReferenceFromObject(line2D1)
CuerdaValor) 'Referencia al eje horizontal
point2D59.ReportName = 2 + 59 Dim reference4 As Reference
Dim point2D60 As ControlPoint2D Set reference4 =
Set point2D60 = factory2D1.CreateControlPoint(CuerdaValor, part1.CreateReferenceFromObject(point2D62) 'Punto de
CuerdaValor) construcción

point2D60.ReportName = 2 + 60 Dim constraint1 As Constraint

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set constraint1 =


constraints1.AddBiEltCst(catCstTypeDistance, reference2,
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reference4)
' Creamos el punto del borde de ataque tanto como control constraint1.Mode = catCstModeDrivingDimension
point
Dim length1 As Length
' como punto (pero de construcción) ya que este ultimo
Set length1 = constraint1.Dimension
' lo necesitamos para parametrizar las lineas de referencia para
poner la incidencia a nuestro perfil. Dim formula1 As Formula

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Set formula1 = relations.CreateFormula("Punto borde de


ataque", "Borde de ataque", length1,
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' "Cuerda*tan(Incidencia)")
Dim point2D61 As ControlPoint2D Set formula1 = relations.CreateFormula("Punto borde de
Set point2D61 = factory2D1.CreateControlPoint(CuerdaValor, ataque", "Borde de ataque", length1, "Cuerda")
CuerdaValor) Dim constraint2 As Constraint
point2D61.ReportName = 63 Set constraint2 =
Dim point2D62 As Point2D constraints1.AddBiEltCst(catCstTypeDistance, reference3,
reference4)

96
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 97

constraint2.Mode = catCstModeDrivingDimension constraint4.Mode = catCstModeDrivingDimension


Dim length2 As Length ' Linea "horizontal de referencia".
Set length2 = constraint2.Dimension Dim point2D65 As Point2D
Dim formula2 As Formula Set point2D65 = factory2D1.CreatePoint(-7000, 7000)
Set formula2 = relations.CreateFormula("Punto borde de point2D65.ReportName = 68
ataque", "Borde de ataque", length2, "Cuerda")
Dim point2D66 As Point2D
' Se crean los puntos de interes para crear los ejes de
coordenadas rotados. Set point2D66 = factory2D1.CreatePoint(7000, -7000)

Dim point2D63 As Point2D point2D66.ReportName = 69

Set point2D63 = factory2D1.CreatePoint(-7000#, -7000#) Dim line2D4 As Line2D

point2D63.ReportName = 65 Set line2D4 = factory2D1.CreateLine(-7000, 7000, 7000, -


7000)
Dim point2D64 As Point2D
line2D4.ReportName = 70
Set point2D64 = factory2D1.CreatePoint(7000#, 7000#)
line2D4.Construction = True
point2D64.ReportName = 66
line2D4.StartPoint = point2D65
' Se crea la linea
line2D4.EndPoint = point2D66
Dim line2D3 As Line2D
Dim reference8 As Reference
Set line2D3 = factory2D1.CreateLine(-7000#, -7000#, 7000#,
7000#) Set reference8 = part1.CreateReferenceFromObject(line2D4)
Dim constraint5 As Constraint
line2D3.ReportName = 67
line2D3.Construction = True Set constraint5 =
constraints1.AddBiEltCst(catCstTypePerpendicularity,
line2D3.StartPoint = point2D63 reference8, reference6)
line2D3.EndPoint = point2D64 constraint5.Mode = catCstModeDrivingDimension
' Acotamos la linea. En primer lugar que forme un ángulo con Dim constraint6 As Constraint
la dirección vertical y en segundo
Set constraint6 =
' lugar que sea coincidente con el punto del borde de ataque. constraints1.AddBiEltCst(catCstTypeDistance, reference7,
reference8)
Dim reference5 As Reference
constraint6.Mode = catCstModeDrivingDimension
Set reference5 = part1.CreateReferenceFromObject(line2D3)
Dim length6 As Length
Dim constraint3 As Constraint
Set length6 = constraint6.Dimension
Set constraint3 = constraints1.AddBiEltCst(catCstTypeAngle,
reference5, reference2) Dim formula4 As Formula
constraint3.Mode = catCstModeDrivingDimension Set formula4 = relations.CreateFormula("Linea referencia
horizontal Incidencia", "Referencia horizontal Incidencia",
constraint3.AngleSector = catCstAngleSector0 length6, "Cuerda")
Dim angle3 As Angle ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set angle3 = constraint3.Dimension ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim formula3 As Formula ' Definimos las constraints de todos los puntos acotando estos
Set formula3 = relations.CreateFormula("Linea referencia en distancias a ambas direcciones del sketch.
vertical Incidencia", "Incidencia", angle3, "Incidencia") ' Debemos seguir una lógica para acotar los puntos ya que esta
Dim reference6 As Reference afectará a nuestra Rule.

Set reference6 = part1.CreateReferenceFromObject(line2D3) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'vertical cambiada ''' En primer lugar vamos a acotar los puntos del Extradós por
Dim reference7 As Reference su distancia al eje vertical '''

Set reference7 = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


part1.CreateReferenceFromObject(point2D62) 'Punto Dim reference9 As Reference
construcción borde ataque
Set reference9 = part1.CreateReferenceFromObject(point2D1)
Dim constraint4 As Constraint
Dim constraint7 As Constraint
Set constraint4 = constraints1.AddBiEltCst(catCstTypeOn,
reference6, reference7) 'Constraint de coincidencia Set constraint7 =

97
98
ANEXOS

constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint13.Mode = catCstModeDrivingDimension


reference9)
Dim reference16 As Reference
constraint7.Mode = catCstModeDrivingDimension
Set reference16 =
Dim reference10 As Reference part1.CreateReferenceFromObject(point2D8)
Set reference10 = Dim constraint14 As Constraint
part1.CreateReferenceFromObject(point2D2)
Set constraint14 =
Dim constraint8 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference16)
Set constraint8 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint14.Mode = catCstModeDrivingDimension
reference10)
Dim reference17 As Reference
constraint8.Mode = catCstModeDrivingDimension
Set reference17 =
Dim reference11 As Reference part1.CreateReferenceFromObject(point2D9)
Set reference11 = Dim constraint15 As Constraint
part1.CreateReferenceFromObject(point2D3)
Set constraint15 =
Dim constraint9 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference17)
Set constraint9 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint15.Mode = catCstModeDrivingDimension
reference11)
Dim reference18 As Reference
constraint9.Mode = catCstModeDrivingDimension
Set reference18 =
Dim reference12 As Reference part1.CreateReferenceFromObject(point2D10)
Set reference12 = Dim constraint16 As Constraint
part1.CreateReferenceFromObject(point2D4)
Set constraint16 =
Dim constraint10 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference18)
Set constraint10 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint16.Mode = catCstModeDrivingDimension
reference12)
Dim reference19 As Reference
constraint10.Mode = catCstModeDrivingDimension
Set reference19 =
Dim reference13 As Reference part1.CreateReferenceFromObject(point2D11)
Set reference13 = Dim constraint17 As Constraint
part1.CreateReferenceFromObject(point2D5)
Set constraint17 =
Dim constraint11 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference19)
Set constraint11 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint17.Mode = catCstModeDrivingDimension
reference13)
Dim reference20 As Reference
constraint11.Mode = catCstModeDrivingDimension
Set reference20 =
Dim reference14 As Reference part1.CreateReferenceFromObject(point2D12)
Set reference14 = Dim constraint18 As Constraint
part1.CreateReferenceFromObject(point2D6)
Set constraint18 =
Dim constraint12 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference20)
Set constraint12 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint18.Mode = catCstModeDrivingDimension
reference14)
Dim reference21 As Reference
constraint12.Mode = catCstModeDrivingDimension
Set reference21 =
Dim reference15 As Reference part1.CreateReferenceFromObject(point2D13)
Set reference15 = Dim constraint19 As Constraint
part1.CreateReferenceFromObject(point2D7)
Set constraint19 =
Dim constraint13 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference21)
Set constraint13 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint19.Mode = catCstModeDrivingDimension
reference15)
Dim reference22 As Reference

98
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 99

Set reference22 = Dim constraint26 As Constraint


part1.CreateReferenceFromObject(point2D14)
Set constraint26 =
Dim constraint20 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference28)
Set constraint20 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint26.Mode = catCstModeDrivingDimension
reference22)
Dim reference29 As Reference
constraint20.Mode = catCstModeDrivingDimension
Set reference29 =
Dim reference23 As Reference part1.CreateReferenceFromObject(point2D21)
Set reference23 = Dim constraint27 As Constraint
part1.CreateReferenceFromObject(point2D15)
Set constraint27 =
Dim constraint21 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference29)
Set constraint21 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint27.Mode = catCstModeDrivingDimension
reference23)
Dim reference30 As Reference
constraint21.Mode = catCstModeDrivingDimension
Set reference30 =
Dim reference24 As Reference part1.CreateReferenceFromObject(point2D22)
Set reference24 = Dim constraint28 As Constraint
part1.CreateReferenceFromObject(point2D16)
Set constraint28 =
Dim constraint22 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference30)
Set constraint22 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint28.Mode = catCstModeDrivingDimension
reference24)
Dim reference31 As Reference
constraint22.Mode = catCstModeDrivingDimension
Set reference31 =
Dim reference25 As Reference part1.CreateReferenceFromObject(point2D23)
Set reference25 = Dim constraint29 As Constraint
part1.CreateReferenceFromObject(point2D17)
Set constraint29 =
Dim constraint23 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference31)
Set constraint23 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint29.Mode = catCstModeDrivingDimension
reference25)
Dim reference32 As Reference
constraint23.Mode = catCstModeDrivingDimension
Set reference32 =
Dim reference26 As Reference part1.CreateReferenceFromObject(point2D24)
Set reference26 = Dim constraint30 As Constraint
part1.CreateReferenceFromObject(point2D18)
Set constraint30 =
Dim constraint24 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference32)
Set constraint24 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint30.Mode = catCstModeDrivingDimension
reference26)
Dim reference33 As Reference
constraint24.Mode = catCstModeDrivingDimension
Set reference33 =
Dim reference27 As Reference part1.CreateReferenceFromObject(point2D25)
Set reference27 = Dim constraint31 As Constraint
part1.CreateReferenceFromObject(point2D19)
Set constraint31 =
Dim constraint25 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference33)
Set constraint25 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint31.Mode = catCstModeDrivingDimension
reference27)
Dim reference34 As Reference
constraint25.Mode = catCstModeDrivingDimension
Set reference34 =
Dim reference28 As Reference part1.CreateReferenceFromObject(point2D26)
Set reference28 = Dim constraint32 As Constraint
part1.CreateReferenceFromObject(point2D20)
Set constraint32 =

99
100
ANEXOS

constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint38 As Constraint


reference34)
Set constraint38 =
constraint32.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference40)
Dim reference35 As Reference
constraint38.Mode = catCstModeDrivingDimension
Set reference35 =
part1.CreateReferenceFromObject(point2D27) Dim reference41 As Reference
Dim constraint33 As Constraint Set reference41 =
part1.CreateReferenceFromObject(point2D3)
Set constraint33 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint39 As Constraint
reference35)
Set constraint39 =
constraint33.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference41)
Dim reference36 As Reference
constraint39.Mode = catCstModeDrivingDimension
Set reference36 =
part1.CreateReferenceFromObject(point2D28) Dim reference42 As Reference
Dim constraint34 As Constraint Set reference42 =
part1.CreateReferenceFromObject(point2D4)
Set constraint34 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint40 As Constraint
reference36)
Set constraint40 =
constraint34.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference42)
Dim reference37 As Reference
constraint40.Mode = catCstModeDrivingDimension
Set reference37 =
part1.CreateReferenceFromObject(point2D29) Dim reference43 As Reference
Dim constraint35 As Constraint Set reference43 =
part1.CreateReferenceFromObject(point2D5)
Set constraint35 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint41 As Constraint
reference37)
Set constraint41 =
constraint35.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference43)
Dim reference38 As Reference
constraint41.Mode = catCstModeDrivingDimension
Set reference38 =
part1.CreateReferenceFromObject(point2D30) Dim reference44 As Reference
Dim constraint36 As Constraint Set reference44 =
part1.CreateReferenceFromObject(point2D6)
Set constraint36 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint42 As Constraint
reference38)
Set constraint42 =
constraint36.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference44)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint42.Mode = catCstModeDrivingDimension
'En segundo lugar vamos a acotar los puntos del Extradós por
su distancia al eje horizontal Dim reference45 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference45 =
part1.CreateReferenceFromObject(point2D7)
Dim reference39 As Reference
Dim constraint43 As Constraint
Set reference39 =
part1.CreateReferenceFromObject(point2D1) Set constraint43 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint37 As Constraint
reference45)
Set constraint37 = constraint43.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference39) Dim reference46 As Reference
constraint37.Mode = catCstModeDrivingDimension Set reference46 =
part1.CreateReferenceFromObject(point2D8)
Dim reference40 As Reference
Dim constraint44 As Constraint
Set reference40 =
part1.CreateReferenceFromObject(point2D2) Set constraint44 =

100
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 101

constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint50.Mode = catCstModeDrivingDimension


reference46)
Dim reference53 As Reference
constraint44.Mode = catCstModeDrivingDimension
Set reference53 =
Dim reference47 As Reference part1.CreateReferenceFromObject(point2D15)
Set reference47 = Dim constraint51 As Constraint
part1.CreateReferenceFromObject(point2D9)
Set constraint51 =
Dim constraint45 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference53)
Set constraint45 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint51.Mode = catCstModeDrivingDimension
reference47)
Dim reference54 As Reference
constraint45.Mode = catCstModeDrivingDimension
Set reference54 =
Dim reference48 As Reference part1.CreateReferenceFromObject(point2D16)
Set reference48 = Dim constraint52 As Constraint
part1.CreateReferenceFromObject(point2D10)
Set constraint52 =
Dim constraint46 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference54)
Set constraint46 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint52.Mode = catCstModeDrivingDimension
reference48)
Dim reference55 As Reference
constraint46.Mode = catCstModeDrivingDimension
Set reference55 =
Dim reference49 As Reference part1.CreateReferenceFromObject(point2D17)
Set reference49 = Dim constraint53 As Constraint
part1.CreateReferenceFromObject(point2D11)
Set constraint53 =
Dim constraint47 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference55)
Set constraint47 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint53.Mode = catCstModeDrivingDimension
reference49)
Dim reference56 As Reference
constraint47.Mode = catCstModeDrivingDimension
Set reference56 =
Dim reference50 As Reference part1.CreateReferenceFromObject(point2D18)
Set reference50 = Dim constraint54 As Constraint
part1.CreateReferenceFromObject(point2D12)
Set constraint54 =
Dim constraint48 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference56)
Set constraint48 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint54.Mode = catCstModeDrivingDimension
reference50)
Dim reference57 As Reference
constraint48.Mode = catCstModeDrivingDimension
Set reference57 =
Dim reference51 As Reference part1.CreateReferenceFromObject(point2D19)
Set reference51 = Dim constraint55 As Constraint
part1.CreateReferenceFromObject(point2D13)
Set constraint55 =
Dim constraint49 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference57)
Set constraint49 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint55.Mode = catCstModeDrivingDimension
reference51)
Dim reference58 As Reference
constraint49.Mode = catCstModeDrivingDimension
Set reference58 =
Dim reference52 As Reference part1.CreateReferenceFromObject(point2D20)
Set reference52 = Dim constraint56 As Constraint
part1.CreateReferenceFromObject(point2D14)
Set constraint56 =
Dim constraint50 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference58)
Set constraint50 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint56.Mode = catCstModeDrivingDimension
reference52)
Dim reference59 As Reference

101
102
ANEXOS

Set reference59 = Dim constraint63 As Constraint


part1.CreateReferenceFromObject(point2D21)
Set constraint63 =
Dim constraint57 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference65)
Set constraint57 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint63.Mode = catCstModeDrivingDimension
reference59)
Dim reference66 As Reference
constraint57.Mode = catCstModeDrivingDimension
Set reference66 =
Dim reference60 As Reference part1.CreateReferenceFromObject(point2D28)
Set reference60 = Dim constraint64 As Constraint
part1.CreateReferenceFromObject(point2D22)
Set constraint64 =
Dim constraint58 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference66)
Set constraint58 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint64.Mode = catCstModeDrivingDimension
reference60)
Dim reference67 As Reference
constraint58.Mode = catCstModeDrivingDimension
Set reference67 =
Dim reference61 As Reference part1.CreateReferenceFromObject(point2D29)
Set reference61 = Dim constraint65 As Constraint
part1.CreateReferenceFromObject(point2D23)
Set constraint65 =
Dim constraint59 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference67)
Set constraint59 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint65.Mode = catCstModeDrivingDimension
reference61)
Dim reference68 As Reference
constraint59.Mode = catCstModeDrivingDimension
Set reference68 =
Dim reference62 As Reference part1.CreateReferenceFromObject(point2D30)
Set reference62 = Dim constraint66 As Constraint
part1.CreateReferenceFromObject(point2D24)
Set constraint66 =
Dim constraint60 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference68)
Set constraint60 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint66.Mode = catCstModeDrivingDimension
reference62)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint60.Mode = catCstModeDrivingDimension
'En tercer lugar vamos a acotar los puntos del Intradós por su
Dim reference63 As Reference distancia al eje vertical
Set reference63 = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.CreateReferenceFromObject(point2D25)
Dim reference69 As Reference
Dim constraint61 As Constraint
Set reference69 =
Set constraint61 = part1.CreateReferenceFromObject(point2D31)
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference63) Dim constraint67 As Constraint

constraint61.Mode = catCstModeDrivingDimension Set constraint67 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim reference64 As Reference reference69)
Set reference64 = constraint67.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D26)
Dim reference70 As Reference
Dim constraint62 As Constraint
Set reference70 =
Set constraint62 = part1.CreateReferenceFromObject(point2D32)
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference64) Dim constraint68 As Constraint

constraint62.Mode = catCstModeDrivingDimension Set constraint68 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim reference65 As Reference reference70)
Set reference65 = constraint68.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D27)

102
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 103

Dim reference71 As Reference part1.CreateReferenceFromObject(point2D39)


Set reference71 = Dim constraint75 As Constraint
part1.CreateReferenceFromObject(point2D33)
Set constraint75 =
Dim constraint69 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference77)
Set constraint69 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint75.Mode = catCstModeDrivingDimension
reference71)
Dim reference78 As Reference
constraint69.Mode = catCstModeDrivingDimension
Set reference78 =
Dim reference72 As Reference part1.CreateReferenceFromObject(point2D40)
Set reference72 = Dim constraint76 As Constraint
part1.CreateReferenceFromObject(point2D34)
Set constraint76 =
Dim constraint70 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference78)
Set constraint70 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint76.Mode = catCstModeDrivingDimension
reference72)
Dim reference79 As Reference
constraint70.Mode = catCstModeDrivingDimension
Set reference79 =
Dim reference73 As Reference part1.CreateReferenceFromObject(point2D41)
Set reference73 = Dim constraint77 As Constraint
part1.CreateReferenceFromObject(point2D35)
Set constraint77 =
Dim constraint71 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference79)
Set constraint71 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint77.Mode = catCstModeDrivingDimension
reference73)
Dim reference80 As Reference
constraint71.Mode = catCstModeDrivingDimension
Set reference80 =
Dim reference74 As Reference part1.CreateReferenceFromObject(point2D42)
Set reference74 = Dim constraint78 As Constraint
part1.CreateReferenceFromObject(point2D36)
Set constraint78 =
Dim constraint72 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference80)
Set constraint72 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint78.Mode = catCstModeDrivingDimension
reference74)
Dim reference81 As Reference
constraint72.Mode = catCstModeDrivingDimension
Set reference81 =
Dim reference75 As Reference part1.CreateReferenceFromObject(point2D43)
Set reference75 = Dim constraint79 As Constraint
part1.CreateReferenceFromObject(point2D37)
Set constraint79 =
Dim constraint73 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference81)
Set constraint73 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint79.Mode = catCstModeDrivingDimension
reference75)
Dim reference82 As Reference
constraint73.Mode = catCstModeDrivingDimension
Set reference82 =
Dim reference76 As Reference part1.CreateReferenceFromObject(point2D44)
Set reference76 = Dim constraint80 As Constraint
part1.CreateReferenceFromObject(point2D38)
Set constraint80 =
Dim constraint74 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference82)
Set constraint74 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint80.Mode = catCstModeDrivingDimension
reference76)
Dim reference83 As Reference
constraint74.Mode = catCstModeDrivingDimension
Set reference83 =
Dim reference77 As Reference part1.CreateReferenceFromObject(point2D45)
Set reference77 = Dim constraint81 As Constraint

103
104
ANEXOS

Set constraint81 = reference89)


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
constraint87.Mode = catCstModeDrivingDimension
reference83)
constraint81.Mode = catCstModeDrivingDimension Dim reference90 As Reference

Dim reference84 As Reference Set reference90 =


part1.CreateReferenceFromObject(point2D52)
Set reference84 =
Dim constraint88 As Constraint
part1.CreateReferenceFromObject(point2D46)
Dim constraint82 As Constraint Set constraint88 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint82 = reference90)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference84) constraint88.Mode = catCstModeDrivingDimension

constraint82.Mode = catCstModeDrivingDimension Dim reference91 As Reference

Dim reference85 As Reference Set reference91 =


part1.CreateReferenceFromObject(point2D53)
Set reference85 =
part1.CreateReferenceFromObject(point2D47) Dim constraint89 As Constraint

Dim constraint83 As Constraint Set constraint89 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint83 = reference91)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference85) constraint89.Mode = catCstModeDrivingDimension

constraint83.Mode = catCstModeDrivingDimension Dim reference92 As Reference

Dim reference86 As Reference Set reference92 =


part1.CreateReferenceFromObject(point2D54)
Set reference86 =
part1.CreateReferenceFromObject(point2D48) Dim constraint90 As Constraint

Dim constraint84 As Constraint Set constraint90 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint84 = reference92)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference86) constraint90.Mode = catCstModeDrivingDimension

constraint84.Mode = catCstModeDrivingDimension Dim reference93 As Reference

Dim reference87 As Reference Set reference93 =


part1.CreateReferenceFromObject(point2D55)
Set reference87 =
part1.CreateReferenceFromObject(point2D49) Dim constraint91 As Constraint

Dim constraint85 As Constraint Set constraint91 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint85 = reference93)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference87) constraint91.Mode = catCstModeDrivingDimension

constraint85.Mode = catCstModeDrivingDimension Dim reference94 As Reference

Dim reference88 As Reference Set reference94 =


part1.CreateReferenceFromObject(point2D56)
Set reference88 =
part1.CreateReferenceFromObject(point2D50) Dim constraint92 As Constraint

Dim constraint86 As Constraint Set constraint92 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint86 = reference94)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference88) constraint92.Mode = catCstModeDrivingDimension
Dim reference95 As Reference
constraint86.Mode = catCstModeDrivingDimension
Dim reference89 As Reference Set reference95 =
part1.CreateReferenceFromObject(point2D57)
Set reference89 =
part1.CreateReferenceFromObject(point2D51) Dim constraint93 As Constraint
Set constraint93 =
Dim constraint87 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Set constraint87 = reference95)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
constraint93.Mode = catCstModeDrivingDimension

104
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 105

Dim reference96 As Reference reference101)


Set reference96 = constraint99.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D58)
Dim reference102 As Reference
Dim constraint94 As Constraint
Set reference102 =
Set constraint94 = part1.CreateReferenceFromObject(point2D34)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint100 As Constraint
reference96)
constraint94.Mode = catCstModeDrivingDimension Set constraint100 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim reference97 As Reference reference102)
Set reference97 = constraint100.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D59)
Dim reference103 As Reference
Dim constraint95 As Constraint
Set reference103 =
Set constraint95 = part1.CreateReferenceFromObject(point2D35)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference97) Dim constraint101 As Constraint

constraint95.Mode = catCstModeDrivingDimension Set constraint101 =


constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim reference98 As Reference reference103)
Set reference98 = constraint101.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D60)
Dim reference104 As Reference
Dim constraint96 As Constraint
Set reference104 =
Set constraint96 = part1.CreateReferenceFromObject(point2D36)
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference98) Dim constraint102 As Constraint

constraint96.Mode = catCstModeDrivingDimension Set constraint102 =


constraints1.AddBiEltCst(catCstTypeDistance, reference8,
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reference104)
'' Por último acotamos los puntos del Intradós por su constraint102.Mode = catCstModeDrivingDimension
distancia al eje horizontal ''
Dim reference105 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set reference105 =
Dim reference99 As Reference part1.CreateReferenceFromObject(point2D37)
Set reference99 = Dim constraint103 As Constraint
part1.CreateReferenceFromObject(point2D31)
Set constraint103 =
Dim constraint97 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference105)
Set constraint97 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint103.Mode = catCstModeDrivingDimension
reference99)
Dim reference106 As Reference
constraint97.Mode = catCstModeDrivingDimension
Set reference106 =
Dim reference100 As Reference part1.CreateReferenceFromObject(point2D38)
Set reference100 = Dim constraint104 As Constraint
part1.CreateReferenceFromObject(point2D32)
Set constraint104 =
Dim constraint98 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference106)
Set constraint98 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint104.Mode = catCstModeDrivingDimension
reference100)
Dim reference107 As Reference
constraint98.Mode = catCstModeDrivingDimension
Set reference107 =
Dim reference101 As Reference part1.CreateReferenceFromObject(point2D39)
Set reference101 = Dim constraint105 As Constraint
part1.CreateReferenceFromObject(point2D33)
Set constraint105 =
Dim constraint99 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference107)
Set constraint99 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint105.Mode = catCstModeDrivingDimension

105
106
ANEXOS

Dim reference108 As Reference part1.CreateReferenceFromObject(point2D46)


Set reference108 = Dim constraint112 As Constraint
part1.CreateReferenceFromObject(point2D40)
Set constraint112 =
Dim constraint106 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference114)
Set constraint106 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint112.Mode = catCstModeDrivingDimension
reference108)
Dim reference115 As Reference
constraint106.Mode = catCstModeDrivingDimension
Set reference115 =
Dim reference109 As Reference part1.CreateReferenceFromObject(point2D47)
Set reference109 = Dim constraint113 As Constraint
part1.CreateReferenceFromObject(point2D41)
Set constraint113 =
Dim constraint107 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference115)
Set constraint107 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint113.Mode = catCstModeDrivingDimension
reference109)
Dim reference116 As Reference
constraint107.Mode = catCstModeDrivingDimension
Set reference116 =
Dim reference110 As Reference part1.CreateReferenceFromObject(point2D48)
Set reference110 = Dim constraint114 As Constraint
part1.CreateReferenceFromObject(point2D42)
Set constraint114 =
Dim constraint108 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference116)
Set constraint108 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint114.Mode = catCstModeDrivingDimension
reference110)
Dim reference117 As Reference
constraint108.Mode = catCstModeDrivingDimension
Set reference117 =
Dim reference111 As Reference part1.CreateReferenceFromObject(point2D49)
Set reference111 = Dim constraint115 As Constraint
part1.CreateReferenceFromObject(point2D43)
Set constraint115 =
Dim constraint109 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference117)
Set constraint109 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint115.Mode = catCstModeDrivingDimension
reference111)
Dim reference118 As Reference
constraint109.Mode = catCstModeDrivingDimension
Set reference118 =
Dim reference112 As Reference part1.CreateReferenceFromObject(point2D50)
Set reference112 = Dim constraint116 As Constraint
part1.CreateReferenceFromObject(point2D44)
Set constraint116 =
Dim constraint110 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference118)
Set constraint110 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint116.Mode = catCstModeDrivingDimension
reference112)
Dim reference119 As Reference
constraint110.Mode = catCstModeDrivingDimension
Set reference119 =
Dim reference113 As Reference part1.CreateReferenceFromObject(point2D51)
Set reference113 = Dim constraint117 As Constraint
part1.CreateReferenceFromObject(point2D45)
Set constraint117 =
Dim constraint111 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference119)
Set constraint111 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint117.Mode = catCstModeDrivingDimension
reference113)
Dim reference120 As Reference
constraint111.Mode = catCstModeDrivingDimension
Set reference120 =
Dim reference114 As Reference part1.CreateReferenceFromObject(point2D52)
Set reference114 = Dim constraint118 As Constraint

106
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 107

Set constraint118 = constraint124.Mode = catCstModeDrivingDimension


constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim reference127 As Reference
reference120)
constraint118.Mode = catCstModeDrivingDimension Set reference127 =
part1.CreateReferenceFromObject(point2D59)
Dim reference121 As Reference
Dim constraint125 As Constraint
Set reference121 =
Set constraint125 =
part1.CreateReferenceFromObject(point2D53)
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint119 As Constraint reference127)
Set constraint119 = constraint125.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference121) Dim reference128 As Reference

constraint119.Mode = catCstModeDrivingDimension Set reference128 =


part1.CreateReferenceFromObject(point2D60)
Dim reference122 As Reference
Dim constraint126 As Constraint
Set reference122 =
part1.CreateReferenceFromObject(point2D54) Set constraint126 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint120 As Constraint reference128)
Set constraint120 = constraint126.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference122) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

constraint120.Mode = catCstModeDrivingDimension ''' Acotamos el control point del borde de ataque '''

Dim reference123 As Reference ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set reference123 = Dim reference129 As Reference


part1.CreateReferenceFromObject(point2D55) Set reference129 =
Dim constraint121 As Constraint part1.CreateReferenceFromObject(point2D61)

Set constraint121 = Dim constraint127 As Constraint


constraints1.AddBiEltCst(catCstTypeDistance, reference8, Set constraint127 =
reference123) constraints1.AddBiEltCst(catCstTypeDistance, reference6,
constraint121.Mode = catCstModeDrivingDimension reference129)

Dim reference124 As Reference constraint127.Mode = catCstModeDrivingDimension

Set reference124 = Dim length127 As Length


part1.CreateReferenceFromObject(point2D56) Set length127 = constraint127.Dimension
Dim constraint122 As Constraint length127.Value = 0
Set constraint122 = Dim reference130 As Reference
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference124) Set reference130 =
part1.CreateReferenceFromObject(point2D61)
constraint122.Mode = catCstModeDrivingDimension
Dim constraint128 As Constraint
Dim reference125 As Reference
Set constraint128 =
Set reference125 = constraints1.AddBiEltCst(catCstTypeDistance, reference8,
part1.CreateReferenceFromObject(point2D57) reference130)
Dim constraint123 As Constraint constraint128.Mode = catCstModeDrivingDimension
Set constraint123 = Dim length128 As Length
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference125) Set length128 = constraint128.Dimension

constraint123.Mode = catCstModeDrivingDimension Dim formula5 As Formula

Dim reference126 As Reference Set formula5 = relations.CreateFormula("Punto borde de


ataque encastre", "Borde de ataque", length128, "Cuerda")
Set reference126 =
part1.CreateReferenceFromObject(point2D58) ' Una vez creado todos los puntos del perfil, realizamos un
spline alrededor de todos los puntos en un nuevo sketch.
Dim constraint124 As Constraint
' En dicho spline hemos unido todos los puntos exceptuando
Set constraint124 = los situados en el borde de salida. Ya que si unimos
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference126) ' estos dos puntos en el mismo spline este se distorsiona.

107
108
ANEXOS

Dim arrayOfObject1(60) Set arrayOfObject1(42) = point2D42


Set arrayOfObject1(0) = point2D30 Set arrayOfObject1(43) = point2D43
Set arrayOfObject1(1) = point2D29 Set arrayOfObject1(44) = point2D44
Set arrayOfObject1(2) = point2D28 Set arrayOfObject1(45) = point2D45
Set arrayOfObject1(3) = point2D27 Set arrayOfObject1(46) = point2D46
Set arrayOfObject1(4) = point2D26 Set arrayOfObject1(47) = point2D47
Set arrayOfObject1(5) = point2D25 Set arrayOfObject1(48) = point2D48
Set arrayOfObject1(6) = point2D24 Set arrayOfObject1(49) = point2D49
Set arrayOfObject1(7) = point2D23 Set arrayOfObject1(50) = point2D50
Set arrayOfObject1(8) = point2D22 Set arrayOfObject1(51) = point2D51
Set arrayOfObject1(9) = point2D21 Set arrayOfObject1(52) = point2D52
Set arrayOfObject1(10) = point2D20 Set arrayOfObject1(53) = point2D53
Set arrayOfObject1(11) = point2D19 Set arrayOfObject1(54) = point2D54
Set arrayOfObject1(12) = point2D18 Set arrayOfObject1(55) = point2D55
Set arrayOfObject1(13) = point2D17 Set arrayOfObject1(56) = point2D56
Set arrayOfObject1(14) = point2D16 Set arrayOfObject1(57) = point2D57
Set arrayOfObject1(15) = point2D15 Set arrayOfObject1(58) = point2D58
Set arrayOfObject1(16) = point2D14 Set arrayOfObject1(59) = point2D59
Set arrayOfObject1(17) = point2D13 Set arrayOfObject1(60) = point2D60
Set arrayOfObject1(18) = point2D12 Dim spline2D1 As Spline2D
Set arrayOfObject1(19) = point2D11 Set factory2D1temp = factory2D1
Set arrayOfObject1(20) = point2D10 Set spline2D1 =
factory2D1temp.CreateSpline(arrayOfObject1)
Set arrayOfObject1(21) = point2D9
spline2D1.ReportName = 71
Set arrayOfObject1(22) = point2D8
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set arrayOfObject1(23) = point2D7
' Unimos los dos puntos del borde de salida mediante otro
Set arrayOfObject1(24) = point2D6 spline el cual creará una linea recta entre estos dos puntos
Set arrayOfObject1(25) = point2D5 ' aunque lo ideal seria unirlo mediante un arco de
Set arrayOfObject1(26) = point2D4 circunferencia el cual aun no sabemos hacer.

Set arrayOfObject1(27) = point2D3 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set arrayOfObject1(28) = point2D2 Dim arrayOfObject2(1)

Set arrayOfObject1(29) = point2D1 Set arrayOfObject2(0) = point2D30

Set arrayOfObject1(30) = point2D61 Set arrayOfObject2(1) = point2D60

Set arrayOfObject1(31) = point2D31 Dim spline2D2 As Spline2D

Set arrayOfObject1(32) = point2D32 Set factory2D2temp = factory2D1

Set arrayOfObject1(33) = point2D33 Set spline2D2 =


factory2D2temp.CreateSpline(arrayOfObject2)
Set arrayOfObject1(34) = point2D34
spline2D1.ReportName = 72
Set arrayOfObject1(35) = point2D35
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set arrayOfObject1(36) = point2D36
' Cerramos el sketch
Set arrayOfObject1(37) = point2D37
sketch1.CloseEdition
Set arrayOfObject1(38) = point2D38
' Creamos las Regla a través de las cuales tendremos
Set arrayOfObject1(39) = point2D39 parametrizados nuestros perfiles.
Set arrayOfObject1(40) = point2D40 ' Vamos a crear una regla para punto del perfil.
Set arrayOfObject1(41) = point2D41 ' Posteriormente modificamos la Regla e introducimos las

108
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 109

lineas de códigos obtenidas con MATLAB. 0.3516*(40/1000)**2+0.2843*(40/1000)**3-


0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((1-
' Al ser lineas de códigos muy largas, estas no caben en una
(NACA2/10))**2)*((NACA2/10)-(40/1000)))))" & vbCrLf &
sola linea, por lo cual habrá que poner al final de cada linea _
' " & _ para poder continuar debajo y cuando queramos que "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
cambie de linea & vbCrLf & PartBody\Sketch.1\Offset.38\Offset =
Dim rule1 As Rule (Cuerda+((NACA1/100)*(40/1000*Cuerda)*(2*(NACA2/10)
-
Set rule1 = relations.CreateProgram("rule1", "", "") 40/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2
' Modificamos la Regla e introducimos todas las lineas de 969*sqrt(40/1000)-0.1260*(40/1000)-
códigos obtenidas con MATLAB 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
' Al ser muchas lineas de códigos estas no caben en una sola 0)**2)*((NACA2/10)-(40/1000))))) else
linea, por lo cual habrá que poner al final de cada linea PartBody\Sketch.1\Offset.38\Offset =
(Cuerda+((NACA1/100)*(Cuerda-40/1000*Cuerda)*(-
' " & _ para poder continuar debajo y cuando queramos que
2*(NACA2/10)+40/1000+1)/(1-
cambie de linea & vbCrLf &
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule1.Modify "/*Rule created by Francisco Javier Jiménez 40/1000)-0.1260*(40/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(40/1000)))))"
PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)- Dim rule3 As Rule
0.1260*(20/1000)-
Set rule3 = relations.CreateProgram("rule3", "", "")
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule3.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(20/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)- "if (60/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(20/1000)- PartBody\Sketch.1\Offset.9\Offset = (60/1000*Cuerda -
0.3516*(20/1000)**2+0.2843*(20/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(60/1000)-
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))" & vbCrLf & 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
_ 0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(60/1000))))) else
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.9\Offset = (60/1000*Cuerda -
PartBody\Sketch.1\Offset.37\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)-
(Cuerda+((NACA1/100)*(20/1000*Cuerda)*(2*(NACA2/10) 0.1260*(60/1000)-
- 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
20/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2 0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((1-
969*sqrt(20/1000)-0.1260*(20/1000)- (NACA2/10))**2)*((NACA2/10)-(60/1000)))))" & vbCrLf &
0.3516*(20/1000)**2+0.2843*(20/1000)**3- _
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(20/1000))))) else "if (60/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.37\Offset = PartBody\Sketch.1\Offset.39\Offset =
(Cuerda+((NACA1/100)*(Cuerda-20/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(60/1000*Cuerda)*(2*(NACA2/10)
2*(NACA2/10)+20/1000+1)/(1- -
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 60/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2
20/1000)-0.1260*(20/1000)- 969*sqrt(60/1000)-0.1260*(60/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))" 0)**2)*((NACA2/10)-(60/1000))))) else
PartBody\Sketch.1\Offset.39\Offset =
Dim rule2 As Rule (Cuerda+((NACA1/100)*(Cuerda-60/1000*Cuerda)*(-
2*(NACA2/10)+60/1000+1)/(1-
Set rule2 = relations.CreateProgram("rule2", "", "")
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule2.Modify "/*Rule created by Francisco Javier Jiménez 60/1000)-0.1260*(60/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (40/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(60/1000)))))"
PartBody\Sketch.1\Offset.8\Offset = (40/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)- Dim rule4 As Rule
0.1260*(40/1000)-
Set rule4 = relations.CreateProgram("rule4", "", "")
0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule4.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(40/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.8\Offset = (40/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)- "if (80/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(40/1000)- PartBody\Sketch.1\Offset.10\Offset = (80/1000*Cuerda -

109
110
ANEXOS

NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- Dim rule6 As Rule


0.1260*(80/1000)-
Set rule6 = relations.CreateProgram("rule6", "", "")
0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule6.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(80/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.10\Offset = (80/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(80/1000)- PartBody\Sketch.1\Offset.12\Offset = (136/1000*Cuerda -
0.3516*(80/1000)**2+0.2843*(80/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(136/1000)-
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" & vbCrLf & 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
_ 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(136/1000))))) else
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.12\Offset = (136/1000*Cuerda -
PartBody\Sketch.1\Offset.40\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
(Cuerda+((NACA1/100)*(80/1000*Cuerda)*(2*(NACA2/10) 0.1260*(136/1000)-
- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
80/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((1-
969*sqrt(80/1000)-0.1260*(80/1000)- (NACA2/10))**2)*((NACA2/10)-(136/1000)))))" & vbCrLf
0.3516*(80/1000)**2+0.2843*(80/1000)**3- &_
0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(80/1000))))) else "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.40\Offset = PartBody\Sketch.1\Offset.42\Offset =
(Cuerda+((NACA1/100)*(Cuerda-80/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(136/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+80/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 136/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
80/1000)-0.1260*(80/1000)- 2969*sqrt(136/1000)-0.1260*(136/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" 10)**2)*((NACA2/10)-(136/1000))))) else
PartBody\Sketch.1\Offset.42\Offset =
Dim rule5 As Rule (Cuerda+((NACA1/100)*(Cuerda-136/1000*Cuerda)*(-
Set rule5 = relations.CreateProgram("rule5", "", "") 2*(NACA2/10)+136/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule5.Modify "/*Rule created by Francisco Javier Jiménez 136/1000)-0.1260*(136/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (100/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(136/1000)))))"
PartBody\Sketch.1\Offset.11\Offset = (100/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)- Dim rule7 As Rule
0.1260*(100/1000)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- Set rule7 = relations.CreateProgram("rule7", "", "")
0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule7.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(100/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.11\Offset = (100/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)- "if (172/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(100/1000)- PartBody\Sketch.1\Offset.13\Offset = (172/1000*Cuerda -
0.3516*(100/1000)**2+0.2843*(100/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)-
0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(172/1000)-
(NACA2/10))**2)*((NACA2/10)-(100/1000)))))" & vbCrLf 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
&_ 0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(172/1000))))) else
"if (100/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.13\Offset = (172/1000*Cuerda -
PartBody\Sketch.1\Offset.41\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)-
(Cuerda+((NACA1/100)*(100/1000*Cuerda)*(2*(NACA2/10 0.1260*(172/1000)-
)- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
100/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(100/1000)-0.1260*(100/1000)- (NACA2/10))**2)*((NACA2/10)-(172/1000)))))" & vbCrLf
0.3516*(100/1000)**2+0.2843*(100/1000)**3- &_
0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(100/1000))))) else "if (172/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.41\Offset = PartBody\Sketch.1\Offset.43\Offset =
(Cuerda+((NACA1/100)*(Cuerda-100/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(172/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+100/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 172/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
100/1000)-0.1260*(100/1000)- 2969*sqrt(172/1000)-0.1260*(172/1000)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(100/1000)))))" 10)**2)*((NACA2/10)-(172/1000))))) else

110
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 111

PartBody\Sketch.1\Offset.43\Offset = PartBody\Sketch.1\Offset.45\Offset =
(Cuerda+((NACA1/100)*(Cuerda-172/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(244/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+172/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 244/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
172/1000)-0.1260*(172/1000)- 2969*sqrt(244/1000)-0.1260*(244/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" 10)**2)*((NACA2/10)-(244/1000))))) else
PartBody\Sketch.1\Offset.45\Offset =
Dim rule8 As Rule (Cuerda+((NACA1/100)*(Cuerda-244/1000*Cuerda)*(-
Set rule8 = relations.CreateProgram("rule8", "", "") 2*(NACA2/10)+244/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule8.Modify "/*Rule created by Francisco Javier Jiménez 244/1000)-0.1260*(244/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.14\Offset = (208/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(244/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)- Dim rule10 As Rule
0.1260*(208/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- Set rule10 = relations.CreateProgram("rule10", "", "")
0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
rule10.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(208/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.14\Offset = (208/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)- "if (280/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(208/1000)- PartBody\Sketch.1\Offset.16\Offset = (280/1000*Cuerda -
0.3516*(208/1000)**2+0.2843*(208/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(280/1000)-
(NACA2/10))**2)*((NACA2/10)-(208/1000)))))" & vbCrLf 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
&_ 0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(280/1000))))) else
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.16\Offset = (280/1000*Cuerda -
PartBody\Sketch.1\Offset.44\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
(Cuerda+((NACA1/100)*(208/1000*Cuerda)*(2*(NACA2/10 0.1260*(280/1000)-
)- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
208/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(208/1000)-0.1260*(208/1000)- (NACA2/10))**2)*((NACA2/10)-(280/1000)))))" & vbCrLf
0.3516*(208/1000)**2+0.2843*(208/1000)**3- &_
0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(208/1000))))) else "if (280/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.44\Offset = PartBody\Sketch.1\Offset.46\Offset =
(Cuerda+((NACA1/100)*(Cuerda-208/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(280/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+208/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 280/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
208/1000)-0.1260*(208/1000)- 2969*sqrt(280/1000)-0.1260*(280/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(208/1000)))))" 10)**2)*((NACA2/10)-(280/1000))))) else
PartBody\Sketch.1\Offset.46\Offset =
Dim rule9 As Rule (Cuerda+((NACA1/100)*(Cuerda-280/1000*Cuerda)*(-
Set rule9 = relations.CreateProgram("rule9", "", "") 2*(NACA2/10)+280/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule9.Modify "/*Rule created by Francisco Javier Jiménez 280/1000)-0.1260*(280/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
"if (244/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.15\Offset = (244/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(280/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)- Dim rule11 As Rule
0.1260*(244/1000)-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- Set rule11 = relations.CreateProgram("rule11", "", "")
0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule11.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(244/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.15\Offset = (244/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)- "if (316/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(244/1000)- PartBody\Sketch.1\Offset.17\Offset = (316/1000*Cuerda -
0.3516*(244/1000)**2+0.2843*(244/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(316/1000)-
(NACA2/10))**2)*((NACA2/10)-(244/1000)))))" & vbCrLf 0.3516*(316/1000)**2+0.2843*(316/1000)**3-
&_ 0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(316/1000))))) else
"if (244/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.17\Offset = (316/1000*Cuerda -

111
112
ANEXOS

NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)- "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))


0.1260*(316/1000)- PartBody\Sketch.1\Offset.19\Offset = (388/1000*Cuerda -
0.3516*(316/1000)**2+0.2843*(316/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(388/1000)-
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" & vbCrLf 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
&_ 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(388/1000))))) else
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.19\Offset = (388/1000*Cuerda -
PartBody\Sketch.1\Offset.47\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
(Cuerda+((NACA1/100)*(316/1000*Cuerda)*(2*(NACA2/10 0.1260*(388/1000)-
)-
0.3516*(388/1000)**2+0.2843*(388/1000)**3-
316/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(316/1000)-0.1260*(316/1000)- (NACA2/10))**2)*((NACA2/10)-(388/1000)))))" & vbCrLf
0.3516*(316/1000)**2+0.2843*(316/1000)**3- &_
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(316/1000))))) else "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.47\Offset = PartBody\Sketch.1\Offset.49\Offset =
(Cuerda+((NACA1/100)*(Cuerda-316/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(388/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+316/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 388/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
316/1000)-0.1260*(316/1000)- 2969*sqrt(388/1000)-0.1260*(388/1000)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" 10)**2)*((NACA2/10)-(388/1000))))) else
PartBody\Sketch.1\Offset.49\Offset =
Dim rule12 As Rule (Cuerda+((NACA1/100)*(Cuerda-388/1000*Cuerda)*(-
Set rule12 = relations.CreateProgram("rule12", "", "") 2*(NACA2/10)+388/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule12.Modify "/*Rule created by Francisco Javier Jiménez 388/1000)-0.1260*(388/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
"if (352/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.18\Offset = (352/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(388/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)- Dim rule14 As Rule
0.1260*(352/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- Set rule14 = relations.CreateProgram("rule14", "", "")
0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule14.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(352/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.18\Offset = (352/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)- "if (424/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(352/1000)- PartBody\Sketch.1\Offset.20\Offset = (424/1000*Cuerda -
0.3516*(352/1000)**2+0.2843*(352/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)-
0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(424/1000)-
(NACA2/10))**2)*((NACA2/10)-(352/1000)))))" & vbCrLf 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
&_ 0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(424/1000))))) else
"if (352/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.20\Offset = (424/1000*Cuerda -
PartBody\Sketch.1\Offset.48\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)-
(Cuerda+((NACA1/100)*(352/1000*Cuerda)*(2*(NACA2/10 0.1260*(424/1000)-
)- 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
352/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(352/1000)-0.1260*(352/1000)-
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" & vbCrLf
0.3516*(352/1000)**2+0.2843*(352/1000)**3- &_
0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(352/1000))))) else "if (424/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.48\Offset = PartBody\Sketch.1\Offset.50\Offset =
(Cuerda+((NACA1/100)*(Cuerda-352/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(424/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+352/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 424/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
352/1000)-0.1260*(352/1000)- 2969*sqrt(424/1000)-0.1260*(424/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(352/1000)))))" 10)**2)*((NACA2/10)-(424/1000))))) else
PartBody\Sketch.1\Offset.50\Offset =
Dim rule13 As Rule (Cuerda+((NACA1/100)*(Cuerda-424/1000*Cuerda)*(-
Set rule13 = relations.CreateProgram("rule13", "", "") 2*(NACA2/10)+424/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule13.Modify "/*Rule created by Francisco Javier Jiménez 424/1000)-0.1260*(424/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(424/1000)**2+0.2843*(424/1000)**3-

112
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 113

0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" 10)**2)*((NACA2/10)-(496/1000))))) else
PartBody\Sketch.1\Offset.52\Offset =
Dim rule15 As Rule (Cuerda+((NACA1/100)*(Cuerda-496/1000*Cuerda)*(-
Set rule15 = relations.CreateProgram("rule15", "", "") 2*(NACA2/10)+496/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule15.Modify "/*Rule created by Francisco Javier Jiménez 496/1000)-0.1260*(496/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.21\Offset = (460/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(496/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)- Dim rule17 As Rule
0.1260*(460/1000)-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- Set rule17 = relations.CreateProgram("rule17", "", "")
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule17.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(460/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.21\Offset = (460/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)- "if (532/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(460/1000)- PartBody\Sketch.1\Offset.23\Offset = (532/1000*Cuerda -
0.3516*(460/1000)**2+0.2843*(460/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(532/1000)-
(NACA2/10))**2)*((NACA2/10)-(460/1000)))))" & vbCrLf 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
&_ 0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(532/1000))))) else
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.23\Offset = (532/1000*Cuerda -
PartBody\Sketch.1\Offset.51\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)-
(Cuerda+((NACA1/100)*(460/1000*Cuerda)*(2*(NACA2/10 0.1260*(532/1000)-
)- 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
460/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(460/1000)-0.1260*(460/1000)- (NACA2/10))**2)*((NACA2/10)-(532/1000)))))" & vbCrLf
0.3516*(460/1000)**2+0.2843*(460/1000)**3- &_
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(460/1000))))) else "if (532/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.51\Offset = PartBody\Sketch.1\Offset.53\Offset =
(Cuerda+((NACA1/100)*(Cuerda-460/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(532/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+460/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 532/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
460/1000)-0.1260*(460/1000)- 2969*sqrt(532/1000)-0.1260*(532/1000)-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(460/1000)))))" 10)**2)*((NACA2/10)-(532/1000))))) else
PartBody\Sketch.1\Offset.53\Offset =
Dim rule16 As Rule (Cuerda+((NACA1/100)*(Cuerda-532/1000*Cuerda)*(-
Set rule16 = relations.CreateProgram("rule16", "", "") 2*(NACA2/10)+532/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule16.Modify "/*Rule created by Francisco Javier Jiménez 532/1000)-0.1260*(532/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
"if (496/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.22\Offset = (496/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(532/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)- Dim rule18 As Rule
0.1260*(496/1000)-
0.3516*(496/1000)**2+0.2843*(496/1000)**3- Set rule18 = relations.CreateProgram("rule18", "", "")
0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
rule18.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(496/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.22\Offset = (496/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)- "if (568/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(496/1000)- PartBody\Sketch.1\Offset.24\Offset = (568/1000*Cuerda -
0.3516*(496/1000)**2+0.2843*(496/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(568/1000)-
(NACA2/10))**2)*((NACA2/10)-(496/1000)))))" & vbCrLf 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
&_ 0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(568/1000))))) else
"if (496/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.24\Offset = (568/1000*Cuerda -
PartBody\Sketch.1\Offset.52\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
(Cuerda+((NACA1/100)*(496/1000*Cuerda)*(2*(NACA2/10 0.1260*(568/1000)-
)- 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
496/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(496/1000)-0.1260*(496/1000)- (NACA2/10))**2)*((NACA2/10)-(568/1000)))))" & vbCrLf
0.3516*(496/1000)**2+0.2843*(496/1000)**3- &_

113
114
ANEXOS

"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(640/1000))))) else


PartBody\Sketch.1\Offset.54\Offset = PartBody\Sketch.1\Offset.26\Offset = (640/1000*Cuerda -
(Cuerda+((NACA1/100)*(568/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
)- 0.1260*(640/1000)-
568/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
2969*sqrt(568/1000)-0.1260*(568/1000)- 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- (NACA2/10))**2)*((NACA2/10)-(640/1000)))))" & vbCrLf
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(568/1000))))) else
PartBody\Sketch.1\Offset.54\Offset = "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.56\Offset =
(Cuerda+((NACA1/100)*(Cuerda-568/1000*Cuerda)*(-
2*(NACA2/10)+568/1000+1)/(1- (Cuerda+((NACA1/100)*(640/1000*Cuerda)*(2*(NACA2/10
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( )-
568/1000)-0.1260*(568/1000)- 640/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
2969*sqrt(640/1000)-0.1260*(640/1000)-
0.3516*(568/1000)**2+0.2843*(568/1000)**3-
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(568/1000)))))" 0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(640/1000))))) else
Dim rule19 As Rule PartBody\Sketch.1\Offset.56\Offset =
(Cuerda+((NACA1/100)*(Cuerda-640/1000*Cuerda)*(-
Set rule19 = relations.CreateProgram("rule19", "", "") 2*(NACA2/10)+640/1000+1)/(1-
rule19.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 640/1000)-0.1260*(640/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3-
"if (604/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.25\Offset = (604/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(640/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.1260*(604/1000)- Dim rule21 As Rule
0.3516*(604/1000)**2+0.2843*(604/1000)**3- Set rule21 = relations.CreateProgram("rule21", "", "")
0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(604/1000))))) else rule21.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.25\Offset = (604/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.1260*(604/1000)- "if (676/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(604/1000)**2+0.2843*(604/1000)**3- PartBody\Sketch.1\Offset.27\Offset = (676/1000*Cuerda -
0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
(NACA2/10))**2)*((NACA2/10)-(604/1000)))))" & vbCrLf 0.1260*(676/1000)-
&_ 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (604/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(676/1000))))) else
PartBody\Sketch.1\Offset.55\Offset = PartBody\Sketch.1\Offset.27\Offset = (676/1000*Cuerda -
(Cuerda+((NACA1/100)*(604/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
)- 0.1260*(676/1000)-
604/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
2969*sqrt(604/1000)-0.1260*(604/1000)- 0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(604/1000)**2+0.2843*(604/1000)**3- (NACA2/10))**2)*((NACA2/10)-(676/1000)))))" & vbCrLf
0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(604/1000))))) else
PartBody\Sketch.1\Offset.55\Offset = "if (676/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Cuerda+((NACA1/100)*(Cuerda-604/1000*Cuerda)*(- PartBody\Sketch.1\Offset.57\Offset =
2*(NACA2/10)+604/1000+1)/(1- (Cuerda+((NACA1/100)*(676/1000*Cuerda)*(2*(NACA2/10
)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
604/1000)-0.1260*(604/1000)- 676/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
0.3516*(604/1000)**2+0.2843*(604/1000)**3- 2969*sqrt(676/1000)-0.1260*(676/1000)-
0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(604/1000)))))"
10)**2)*((NACA2/10)-(676/1000))))) else
Dim rule20 As Rule PartBody\Sketch.1\Offset.57\Offset =
(Cuerda+((NACA1/100)*(Cuerda-676/1000*Cuerda)*(-
Set rule20 = relations.CreateProgram("rule20", "", "") 2*(NACA2/10)+676/1000+1)/(1-
rule20.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 676/1000)-0.1260*(676/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
"if (640/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.26\Offset = (640/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(676/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
0.1260*(640/1000)- Dim rule22 As Rule
0.3516*(640/1000)**2+0.2843*(640/1000)**3- Set rule22 = relations.CreateProgram("rule22", "", "")
0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/

114
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 115

rule22.Modify "/*Rule created by Francisco Javier Jiménez 748/1000)-0.1260*(748/1000)-


Calvo*/" & vbCrLf & _ 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(748/1000)))))"
PartBody\Sketch.1\Offset.28\Offset = (712/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)- Dim rule24 As Rule
0.1260*(712/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- Set rule24 = relations.CreateProgram("rule24", "", "")
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule24.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(712/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.28\Offset = (712/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)- "if (784/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(712/1000)- PartBody\Sketch.1\Offset.30\Offset = (784/1000*Cuerda -
0.3516*(712/1000)**2+0.2843*(712/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(784/1000)-
(NACA2/10))**2)*((NACA2/10)-(712/1000)))))" & vbCrLf 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
&_ 0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(784/1000))))) else
"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.30\Offset = (784/1000*Cuerda -
PartBody\Sketch.1\Offset.58\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
(Cuerda+((NACA1/100)*(712/1000*Cuerda)*(2*(NACA2/10 0.1260*(784/1000)-
)- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
712/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(712/1000)-0.1260*(712/1000)- (NACA2/10))**2)*((NACA2/10)-(784/1000)))))" & vbCrLf
0.3516*(712/1000)**2+0.2843*(712/1000)**3- &_
0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(712/1000))))) else "if (784/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.58\Offset = PartBody\Sketch.1\Offset.60\Offset =
(Cuerda+((NACA1/100)*(Cuerda-712/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(784/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+712/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 784/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
712/1000)-0.1260*(712/1000)- 2969*sqrt(784/1000)-0.1260*(784/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(712/1000)))))" 10)**2)*((NACA2/10)-(784/1000))))) else
PartBody\Sketch.1\Offset.60\Offset =
Dim rule23 As Rule (Cuerda+((NACA1/100)*(Cuerda-784/1000*Cuerda)*(-
Set rule23 = relations.CreateProgram("rule23", "", "") 2*(NACA2/10)+784/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule23.Modify "/*Rule created by Francisco Javier Jiménez 784/1000)-0.1260*(784/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (748/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(784/1000)))))"
PartBody\Sketch.1\Offset.29\Offset = (748/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)- Dim rule25 As Rule
0.1260*(748/1000)-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- Set rule25 = relations.CreateProgram("rule25", "", "")
0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule25.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(748/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.29\Offset = (748/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)- "if (820/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(748/1000)- PartBody\Sketch.1\Offset.31\Offset = (820/1000*Cuerda -
0.3516*(748/1000)**2+0.2843*(748/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(820/1000)-
(NACA2/10))**2)*((NACA2/10)-(748/1000)))))" & vbCrLf 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
&_ 0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(820/1000))))) else
"if (748/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.31\Offset = (820/1000*Cuerda -
PartBody\Sketch.1\Offset.59\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
(Cuerda+((NACA1/100)*(748/1000*Cuerda)*(2*(NACA2/10 0.1260*(820/1000)-
)- 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
748/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(748/1000)-0.1260*(748/1000)- (NACA2/10))**2)*((NACA2/10)-(820/1000)))))" & vbCrLf
0.3516*(748/1000)**2+0.2843*(748/1000)**3- &_
0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(748/1000))))) else "if (820/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.59\Offset = PartBody\Sketch.1\Offset.61\Offset =
(Cuerda+((NACA1/100)*(Cuerda-748/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(820/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+748/1000+1)/(1- )-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 820/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.

115
116
ANEXOS

2969*sqrt(820/1000)-0.1260*(820/1000)- 0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- (NACA2/10))**2)*((NACA2/10)-(892/1000)))))" & vbCrLf
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(820/1000))))) else
PartBody\Sketch.1\Offset.61\Offset = "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Cuerda+((NACA1/100)*(Cuerda-820/1000*Cuerda)*(- PartBody\Sketch.1\Offset.63\Offset =
(Cuerda+((NACA1/100)*(892/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+820/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( )-
820/1000)-0.1260*(820/1000)- 892/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 2969*sqrt(892/1000)-0.1260*(892/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(820/1000)))))" 0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(892/1000))))) else
Dim rule26 As Rule PartBody\Sketch.1\Offset.63\Offset =
(Cuerda+((NACA1/100)*(Cuerda-892/1000*Cuerda)*(-
Set rule26 = relations.CreateProgram("rule26", "", "") 2*(NACA2/10)+892/1000+1)/(1-
rule26.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 892/1000)-0.1260*(892/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3-
"if (856/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.32\Offset = (856/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(892/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
0.1260*(856/1000)- Dim rule28 As Rule
0.3516*(856/1000)**2+0.2843*(856/1000)**3- Set rule28 = relations.CreateProgram("rule28", "", "")
0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(856/1000))))) else rule28.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.32\Offset = (856/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
0.1260*(856/1000)- "if (928/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(856/1000)**2+0.2843*(856/1000)**3- PartBody\Sketch.1\Offset.34\Offset = (928/1000*Cuerda -
0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)-
(NACA2/10))**2)*((NACA2/10)-(856/1000)))))" & vbCrLf 0.1260*(928/1000)-
&_ 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (856/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(928/1000))))) else
PartBody\Sketch.1\Offset.62\Offset = PartBody\Sketch.1\Offset.34\Offset = (928/1000*Cuerda -
(Cuerda+((NACA1/100)*(856/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)-
)- 0.1260*(928/1000)-
856/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
2969*sqrt(856/1000)-0.1260*(856/1000)- 0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- (NACA2/10))**2)*((NACA2/10)-(928/1000)))))" & vbCrLf
0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(856/1000))))) else
"if (928/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.62\Offset =
(Cuerda+((NACA1/100)*(Cuerda-856/1000*Cuerda)*(- PartBody\Sketch.1\Offset.64\Offset =
2*(NACA2/10)+856/1000+1)/(1- (Cuerda+((NACA1/100)*(928/1000*Cuerda)*(2*(NACA2/10
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( )-
928/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
856/1000)-0.1260*(856/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 2969*sqrt(928/1000)-0.1260*(928/1000)-
0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(856/1000)))))" 0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(928/1000))))) else
Dim rule27 As Rule PartBody\Sketch.1\Offset.64\Offset =
(Cuerda+((NACA1/100)*(Cuerda-928/1000*Cuerda)*(-
Set rule27 = relations.CreateProgram("rule27", "", "") 2*(NACA2/10)+928/1000+1)/(1-
rule27.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 928/1000)-0.1260*(928/1000)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3-
"if (892/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.33\Offset = (892/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(928/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.1260*(892/1000)- Dim rule29 As Rule
0.3516*(892/1000)**2+0.2843*(892/1000)**3- Set rule29 = relations.CreateProgram("rule29", "", "")
0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(892/1000))))) else rule29.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.33\Offset = (892/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.1260*(892/1000)- "if (964/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(892/1000)**2+0.2843*(892/1000)**3- PartBody\Sketch.1\Offset.35\Offset = (964/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-

116
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 117

0.1260*(964/1000)- Set rule31 = relations.CreateProgram("rule31", "", "")


0.3516*(964/1000)**2+0.2843*(964/1000)**3-
rule31.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(964/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.35\Offset = (964/1000*Cuerda - "if (20/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)- PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +
0.1260*(964/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1260*(20/1000)-
0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(964/1000)))))" & vbCrLf 0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
&_ 0)**2)*((NACA2/10)-(20/1000))))) else
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +
PartBody\Sketch.1\Offset.65\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
(Cuerda+((NACA1/100)*(964/1000*Cuerda)*(2*(NACA2/10 0.1260*(20/1000)-
)- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
964/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(964/1000)-0.1260*(964/1000)- (NACA2/10))**2)*((NACA2/10)-(20/1000)))))" & vbCrLf &
0.3516*(964/1000)**2+0.2843*(964/1000)**3- _
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (20/1000*Cuerda) <= (Cuerda*(NACA2/10))
10)**2)*((NACA2/10)-(964/1000))))) else PartBody\Sketch.1\Offset.97\Offset =
PartBody\Sketch.1\Offset.65\Offset = (Cuerda+((NACA1/100)*(20/1000*Cuerda)*(2*(NACA2/10)
(Cuerda+((NACA1/100)*(Cuerda-964/1000*Cuerda)*(- -20/1000)/(NACA2/10)**2)-
2*(NACA2/10)+964/1000+1)/(1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 0.1260*(20/1000)-
964/1000)-0.1260*(964/1000)- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0)**2)*((NACA2/10)-(20/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(964/1000)))))" PartBody\Sketch.1\Offset.97\Offset = (Cuerda
Dim rule30 As Rule +((NACA1/100)*(Cuerda-20/1000*Cuerda)*(-
2*(NACA2/10)+20/1000+1)/(1-NACA2/10)**2)-
Set rule30 = relations.CreateProgram("rule30", "", "") NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.1260*(20/1000)-
rule30.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(20/1000)))))"
PartBody\Sketch.1\Offset.36\Offset = (1000/1000*Cuerda - Dim rule32 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(1000/1000)- Set rule32 = relations.CreateProgram("rule32", "", "")
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2 rule32.Modify "/*Rule created by Francisco Javier Jiménez
/10)**2)*((NACA2/10)-(1000/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.36\Offset = (1000/1000*Cuerda - "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)- PartBody\Sketch.1\Offset.68\Offset = (40/1000*Cuerda +
0.1260*(1000/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- 0.1260*(40/1000)-
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" & vbCrLf 0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
&_ 0)**2)*((NACA2/10)-(40/1000))))) else
"if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.68\Offset = (40/1000*Cuerda +
PartBody\Sketch.1\Offset.66\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
(Cuerda+((NACA1/100)*(1000/1000*Cuerda)*(2*(NACA2/1 0.1260*(40/1000)-
0)- 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
1000/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*( 0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.2969*sqrt(1000/1000)-0.1260*(1000/1000)- (NACA2/10))**2)*((NACA2/10)-(40/1000)))))" & vbCrLf &
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- _
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((NACA "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
2/10)**2)*((NACA2/10)-(1000/1000))))) else PartBody\Sketch.1\Offset.98\Offset =
PartBody\Sketch.1\Offset.66\Offset = (Cuerda+((NACA1/100)*(40/1000*Cuerda)*(2*(NACA2/10)
(Cuerda+((NACA1/100)*(Cuerda-1000/1000*Cuerda)*(- -40/1000)/(NACA2/10)**2)-
2*(NACA2/10)+1000/1000+1)/(1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 0.1260*(40/1000)-
1000/1000)-0.1260*(1000/1000)- 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- 0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0)**2)*((NACA2/10)-(40/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" PartBody\Sketch.1\Offset.98\Offset = (Cuerda
Dim rule31 As Rule +((NACA1/100)*(Cuerda-40/1000*Cuerda)*(-
2*(NACA2/10)+40/1000+1)/(1-NACA2/10)**2)-

117
118
ANEXOS

NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)-
0.1260*(40/1000)- 0.1260*(80/1000)-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
(NACA2/10))**2)*((NACA2/10)-(40/1000)))))" 0)**2)*((NACA2/10)-(80/1000))))) else
PartBody\Sketch.1\Offset.100\Offset = (Cuerda
Dim rule33 As Rule
+((NACA1/100)*(Cuerda-80/1000*Cuerda)*(-
Set rule33 = relations.CreateProgram("rule33", "", "") 2*(NACA2/10)+80/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)-
rule33.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(80/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
"if (60/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.69\Offset = (60/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(80/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- Dim rule35 As Rule
0.1260*(60/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- Set rule35 = relations.CreateProgram("rule35", "", "")
0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule35.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(60/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.69\Offset = (60/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- "if (100/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(60/1000)- PartBody\Sketch.1\Offset.71\Offset = (100/1000*Cuerda +
0.3516*(60/1000)**2+0.2843*(60/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(100/1000)-
(NACA2/10))**2)*((NACA2/10)-(60/1000)))))" & vbCrLf & 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
_ 0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(100/1000))))) else
"if (60/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.71\Offset = (100/1000*Cuerda +
PartBody\Sketch.1\Offset.99\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
(Cuerda+((NACA1/100)*(60/1000*Cuerda)*(2*(NACA2/10) 0.1260*(100/1000)-
-60/1000)/(NACA2/10)**2)- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- 0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(60/1000)- (NACA2/10))**2)*((NACA2/10)-(100/1000)))))" & vbCrLf
0.3516*(60/1000)**2+0.2843*(60/1000)**3- &_
0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(60/1000))))) else "if (100/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.99\Offset = (Cuerda PartBody\Sketch.1\Offset.101\Offset =
+((NACA1/100)*(Cuerda-60/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(100/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+60/1000+1)/(1-NACA2/10)**2)- )-100/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
0.1260*(60/1000)- 0.1260*(100/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(60/1000)))))" 10)**2)*((NACA2/10)-(100/1000))))) else
PartBody\Sketch.1\Offset.101\Offset = (Cuerda
Dim rule34 As Rule +((NACA1/100)*(Cuerda-100/1000*Cuerda)*(-
Set rule34 = relations.CreateProgram("rule34", "", "") 2*(NACA2/10)+100/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
rule34.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(100/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.70\Offset = (80/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(100/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- Dim rule36 As Rule
0.1260*(80/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- Set rule36 = relations.CreateProgram("rule36", "", "")
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule36.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(80/1000))))) else
Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.70\Offset = (80/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(80/1000)- PartBody\Sketch.1\Offset.72\Offset = (136/1000*Cuerda +
0.3516*(80/1000)**2+0.2843*(80/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(136/1000)-
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" & vbCrLf & 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
_ 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(136/1000))))) else
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.72\Offset = (136/1000*Cuerda +
PartBody\Sketch.1\Offset.100\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
(Cuerda+((NACA1/100)*(80/1000*Cuerda)*(2*(NACA2/10) 0.1260*(136/1000)-
-80/1000)/(NACA2/10)**2)-

118
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 119

0.3516*(136/1000)**2+0.2843*(136/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(208/1000)-
(NACA2/10))**2)*((NACA2/10)-(136/1000)))))" & vbCrLf 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
&_ 0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(208/1000))))) else
"if (136/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.74\Offset = (208/1000*Cuerda +
PartBody\Sketch.1\Offset.102\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
(Cuerda+((NACA1/100)*(136/1000*Cuerda)*(2*(NACA2/10 0.1260*(208/1000)-
)-136/1000)/(NACA2/10)**2)- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)- 0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(136/1000)-
(NACA2/10))**2)*((NACA2/10)-(208/1000)))))" & vbCrLf
0.3516*(136/1000)**2+0.2843*(136/1000)**3- &_
0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(136/1000))))) else "if (208/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.102\Offset = (Cuerda PartBody\Sketch.1\Offset.104\Offset =
+((NACA1/100)*(Cuerda-136/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(208/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+136/1000+1)/(1-NACA2/10)**2)- )-208/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
0.1260*(136/1000)- 0.1260*(208/1000)-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(136/1000)))))" 10)**2)*((NACA2/10)-(208/1000))))) else
PartBody\Sketch.1\Offset.104\Offset = (Cuerda
Dim rule37 As Rule +((NACA1/100)*(Cuerda-208/1000*Cuerda)*(-
Set rule37 = relations.CreateProgram("rule37", "", "") 2*(NACA2/10)+208/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
rule37.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(208/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
"if (172/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.73\Offset = (172/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(208/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- Dim rule39 As Rule
0.1260*(172/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- Set rule39 = relations.CreateProgram("rule39", "", "")
0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule39.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(172/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.73\Offset = (172/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- "if (244/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(172/1000)- PartBody\Sketch.1\Offset.75\Offset = (244/1000*Cuerda +
0.3516*(172/1000)**2+0.2843*(172/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(244/1000)-
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" & vbCrLf 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
&_ 0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(244/1000))))) else
"if (172/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.75\Offset = (244/1000*Cuerda +
PartBody\Sketch.1\Offset.103\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
(Cuerda+((NACA1/100)*(172/1000*Cuerda)*(2*(NACA2/10 0.1260*(244/1000)-
)-172/1000)/(NACA2/10)**2)-
0.3516*(244/1000)**2+0.2843*(244/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- 0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(172/1000)- (NACA2/10))**2)*((NACA2/10)-(244/1000)))))" & vbCrLf
0.3516*(172/1000)**2+0.2843*(172/1000)**3- &_
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(172/1000))))) else "if (244/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.103\Offset = (Cuerda PartBody\Sketch.1\Offset.105\Offset =
+((NACA1/100)*(Cuerda-172/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(244/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+172/1000+1)/(1-NACA2/10)**2)- )-244/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
0.1260*(172/1000)- 0.1260*(244/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" 10)**2)*((NACA2/10)-(244/1000))))) else
PartBody\Sketch.1\Offset.105\Offset = (Cuerda
Dim rule38 As Rule +((NACA1/100)*(Cuerda-244/1000*Cuerda)*(-
Set rule38 = relations.CreateProgram("rule38", "", "") 2*(NACA2/10)+244/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
rule38.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(244/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.74\Offset = (208/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(244/1000)))))"

119
120
ANEXOS

Dim rule40 As Rule PartBody\Sketch.1\Offset.107\Offset = (Cuerda


+((NACA1/100)*(Cuerda-316/1000*Cuerda)*(-
Set rule40 = relations.CreateProgram("rule40", "", "")
2*(NACA2/10)+316/1000+1)/(1-NACA2/10)**2)-
rule40.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(316/1000)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3-
"if (280/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.76\Offset = (280/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(316/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
0.1260*(280/1000)- Dim rule42 As Rule
0.3516*(280/1000)**2+0.2843*(280/1000)**3- Set rule42 = relations.CreateProgram("rule42", "", "")
0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(280/1000))))) else rule42.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.76\Offset = (280/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
0.1260*(280/1000)- "if (352/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.78\Offset = (352/1000*Cuerda +
0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
(NACA2/10))**2)*((NACA2/10)-(280/1000)))))" & vbCrLf 0.1260*(352/1000)-
&_ 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (280/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(352/1000))))) else
PartBody\Sketch.1\Offset.106\Offset = PartBody\Sketch.1\Offset.78\Offset = (352/1000*Cuerda +
(Cuerda+((NACA1/100)*(280/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
)-280/1000)/(NACA2/10)**2)- 0.1260*(352/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
0.1260*(280/1000)- 0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- (NACA2/10))**2)*((NACA2/10)-(352/1000)))))" & vbCrLf
0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(280/1000))))) else
PartBody\Sketch.1\Offset.106\Offset = (Cuerda "if (352/1000*Cuerda) <= (Cuerda*(NACA2/10))
+((NACA1/100)*(Cuerda-280/1000*Cuerda)*(- PartBody\Sketch.1\Offset.108\Offset =
2*(NACA2/10)+280/1000+1)/(1-NACA2/10)**2)- (Cuerda+((NACA1/100)*(352/1000*Cuerda)*(2*(NACA2/10
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- )-352/1000)/(NACA2/10)**2)-
0.1260*(280/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- 0.1260*(352/1000)-
0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(280/1000)))))" 0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(352/1000))))) else
Dim rule41 As Rule PartBody\Sketch.1\Offset.108\Offset =
(Cuerda+((NACA1/100)*(Cuerda-352/1000*Cuerda)*(-
Set rule41 = relations.CreateProgram("rule41", "", "") 2*(NACA2/10)+352/1000+1)/(1-NACA2/10)**2)-
rule41.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(352/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3-
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.77\Offset = (316/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(352/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- Dim rule43 As Rule
0.3516*(316/1000)**2+0.2843*(316/1000)**3- Set rule43 = relations.CreateProgram("rule43", "", "")
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(316/1000))))) else rule43.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.77\Offset = (316/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(316/1000)**2+0.2843*(316/1000)**3- PartBody\Sketch.1\Offset.79\Offset = (388/1000*Cuerda +
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
0.1260*(388/1000)-
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" & vbCrLf
&_ 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(388/1000))))) else
PartBody\Sketch.1\Offset.107\Offset = PartBody\Sketch.1\Offset.79\Offset = (388/1000*Cuerda +
(Cuerda+((NACA1/100)*(316/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
)-316/1000)/(NACA2/10)**2)- 0.1260*(388/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1260*(316/1000)- 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- (NACA2/10))**2)*((NACA2/10)-(388/1000)))))" & vbCrLf
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(316/1000))))) else
"if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))

120
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 121

PartBody\Sketch.1\Offset.109\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
(Cuerda+((NACA1/100)*(388/1000*Cuerda)*(2*(NACA2/10 0.1260*(460/1000)-
)-388/1000)/(NACA2/10)**2)- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)- 0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(388/1000)- (NACA2/10))**2)*((NACA2/10)-(460/1000)))))" & vbCrLf
0.3516*(388/1000)**2+0.2843*(388/1000)**3- &_
0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(388/1000))))) else "if (460/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.109\Offset = PartBody\Sketch.1\Offset.111\Offset =
(Cuerda+((NACA1/100)*(Cuerda-388/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(460/1000*Cuerda)*(2*(NACA2/10
)-460/1000)/(NACA2/10)**2)-
2*(NACA2/10)+388/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
0.1260*(388/1000)- 0.1260*(460/1000)-
0.3516*(388/1000)**2+0.2843*(388/1000)**3- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(388/1000)))))" 10)**2)*((NACA2/10)-(460/1000))))) else
PartBody\Sketch.1\Offset.111\Offset =
Dim rule44 As Rule (Cuerda+((NACA1/100)*(Cuerda-460/1000*Cuerda)*(-
2*(NACA2/10)+460/1000+1)/(1-NACA2/10)**2)-
Set rule44 = relations.CreateProgram("rule44", "", "") NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
rule44.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(460/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (424/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(460/1000)))))"
PartBody\Sketch.1\Offset.80\Offset = (424/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- Dim rule46 As Rule
0.1260*(424/1000)- Set rule46 = relations.CreateProgram("rule46", "", "")
0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule46.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(424/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.80\Offset = (424/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- "if (496/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(424/1000)- PartBody\Sketch.1\Offset.82\Offset = (496/1000*Cuerda +
0.3516*(424/1000)**2+0.2843*(424/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(496/1000)-
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" & vbCrLf 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
&_ 0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(496/1000))))) else
"if (424/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.82\Offset = (496/1000*Cuerda +
PartBody\Sketch.1\Offset.110\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
(Cuerda+((NACA1/100)*(424/1000*Cuerda)*(2*(NACA2/10 0.1260*(496/1000)-
)-424/1000)/(NACA2/10)**2)- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- 0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(424/1000)- (NACA2/10))**2)*((NACA2/10)-(496/1000)))))" & vbCrLf
0.3516*(424/1000)**2+0.2843*(424/1000)**3- &_
0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(424/1000))))) else "if (496/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.112\Offset =
PartBody\Sketch.1\Offset.110\Offset =
(Cuerda+((NACA1/100)*(Cuerda-424/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(496/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+424/1000+1)/(1-NACA2/10)**2)- )-496/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(496/1000)-
0.1260*(424/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" 10)**2)*((NACA2/10)-(496/1000))))) else
PartBody\Sketch.1\Offset.112\Offset =
Dim rule45 As Rule (Cuerda+((NACA1/100)*(Cuerda-496/1000*Cuerda)*(-
2*(NACA2/10)+496/1000+1)/(1-NACA2/10)**2)-
Set rule45 = relations.CreateProgram("rule45", "", "") NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
rule45.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(496/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(496/1000)))))"
PartBody\Sketch.1\Offset.81\Offset = (460/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)- Dim rule47 As Rule
0.1260*(460/1000)- Set rule47 = relations.CreateProgram("rule47", "", "")
0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule47.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(460/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.81\Offset = (460/1000*Cuerda +

121
122
ANEXOS

"if (532/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((1-


PartBody\Sketch.1\Offset.83\Offset = (532/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(568/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)-
0.1260*(532/1000)- Dim rule49 As Rule
0.3516*(532/1000)**2+0.2843*(532/1000)**3- Set rule49 = relations.CreateProgram("rule49", "", "")
0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(532/1000))))) else rule49.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.83\Offset = (532/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- "if (604/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(532/1000)- PartBody\Sketch.1\Offset.85\Offset = (604/1000*Cuerda +
0.3516*(532/1000)**2+0.2843*(532/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(604/1000)-
(NACA2/10))**2)*((NACA2/10)-(532/1000)))))" & vbCrLf 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
&_ 0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (532/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(604/1000))))) else
PartBody\Sketch.1\Offset.113\Offset = PartBody\Sketch.1\Offset.85\Offset = (604/1000*Cuerda +
(Cuerda+((NACA1/100)*(532/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
)-532/1000)/(NACA2/10)**2)- 0.1260*(604/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.1260*(532/1000)- 0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- (NACA2/10))**2)*((NACA2/10)-(604/1000)))))" & vbCrLf
0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(532/1000))))) else "if (604/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.113\Offset = PartBody\Sketch.1\Offset.115\Offset =
(Cuerda+((NACA1/100)*(Cuerda-532/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(604/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+532/1000+1)/(1-NACA2/10)**2)- )-604/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.1260*(532/1000)- 0.1260*(604/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(532/1000)))))" 10)**2)*((NACA2/10)-(604/1000))))) else
Dim rule48 As Rule PartBody\Sketch.1\Offset.115\Offset =
(Cuerda+((NACA1/100)*(Cuerda-604/1000*Cuerda)*(-
Set rule48 = relations.CreateProgram("rule48", "", "") 2*(NACA2/10)+604/1000+1)/(1-NACA2/10)**2)-
rule48.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(604/1000)-
0.3516*(604/1000)**2+0.2843*(604/1000)**3-
"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.84\Offset = (568/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(604/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
0.1260*(568/1000)- Dim rule50 As Rule
0.3516*(568/1000)**2+0.2843*(568/1000)**3- Set rule50 = relations.CreateProgram("rule50", "", "")
0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(568/1000))))) else rule50.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.84\Offset = (568/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(568/1000)- PartBody\Sketch.1\Offset.86\Offset = (640/1000*Cuerda +
0.3516*(568/1000)**2+0.2843*(568/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(640/1000)-
(NACA2/10))**2)*((NACA2/10)-(568/1000)))))" & vbCrLf 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
&_ 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(640/1000))))) else
PartBody\Sketch.1\Offset.114\Offset = PartBody\Sketch.1\Offset.86\Offset = (640/1000*Cuerda +
(Cuerda+((NACA1/100)*(568/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
)-568/1000)/(NACA2/10)**2)- 0.1260*(640/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
0.1260*(568/1000)- 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- (NACA2/10))**2)*((NACA2/10)-(640/1000)))))" & vbCrLf
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(568/1000))))) else "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.114\Offset = PartBody\Sketch.1\Offset.116\Offset =
(Cuerda+((NACA1/100)*(Cuerda-568/1000*Cuerda)*(- (Cuerda+((NACA1/100)*(640/1000*Cuerda)*(2*(NACA2/10
2*(NACA2/10)+568/1000+1)/(1-NACA2/10)**2)- )-640/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
0.1260*(568/1000)- 0.1260*(640/1000)-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-

122
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 123

0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (712/1000*Cuerda) <= (Cuerda*(NACA2/10))


10)**2)*((NACA2/10)-(640/1000))))) else PartBody\Sketch.1\Offset.118\Offset =
PartBody\Sketch.1\Offset.116\Offset = (Cuerda+((NACA1/100)*(712/1000*Cuerda)*(2*(NACA2/10
(Cuerda+((NACA1/100)*(Cuerda-640/1000*Cuerda)*(- )-712/1000)/(NACA2/10)**2)-
2*(NACA2/10)+640/1000+1)/(1-NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)- 0.1260*(712/1000)-
0.1260*(640/1000)- 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- 0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(712/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(640/1000)))))" PartBody\Sketch.1\Offset.118\Offset =
(Cuerda+((NACA1/100)*(Cuerda-712/1000*Cuerda)*(-
Dim rule51 As Rule 2*(NACA2/10)+712/1000+1)/(1-NACA2/10)**2)-
Set rule51 = relations.CreateProgram("rule51", "", "") NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(712/1000)-
rule51.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (676/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(712/1000)))))"
PartBody\Sketch.1\Offset.87\Offset = (676/1000*Cuerda + Dim rule53 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
0.1260*(676/1000)- Set rule53 = relations.CreateProgram("rule53", "", "")
0.3516*(676/1000)**2+0.2843*(676/1000)**3- rule53.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Calvo*/" & vbCrLf & _
10)**2)*((NACA2/10)-(676/1000))))) else
PartBody\Sketch.1\Offset.87\Offset = (676/1000*Cuerda + "if (748/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- PartBody\Sketch.1\Offset.89\Offset = (748/1000*Cuerda +
0.1260*(676/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- 0.1260*(748/1000)-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(676/1000)))))" & vbCrLf 0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
&_ 10)**2)*((NACA2/10)-(748/1000))))) else
PartBody\Sketch.1\Offset.89\Offset = (748/1000*Cuerda +
"if (676/1000*Cuerda) <= (Cuerda*(NACA2/10)) NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
PartBody\Sketch.1\Offset.117\Offset = 0.1260*(748/1000)-
(Cuerda+((NACA1/100)*(676/1000*Cuerda)*(2*(NACA2/10 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
)-676/1000)/(NACA2/10)**2)- 0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((1-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- (NACA2/10))**2)*((NACA2/10)-(748/1000)))))" & vbCrLf
0.1260*(676/1000)- &_
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (748/1000*Cuerda) <= (Cuerda*(NACA2/10))
10)**2)*((NACA2/10)-(676/1000))))) else PartBody\Sketch.1\Offset.119\Offset =
PartBody\Sketch.1\Offset.117\Offset = (Cuerda+((NACA1/100)*(748/1000*Cuerda)*(2*(NACA2/10
(Cuerda+((NACA1/100)*(Cuerda-676/1000*Cuerda)*(- )-748/1000)/(NACA2/10)**2)-
2*(NACA2/10)+676/1000+1)/(1-NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- 0.1260*(748/1000)-
0.1260*(676/1000)- 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- 0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(748/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(676/1000)))))" PartBody\Sketch.1\Offset.119\Offset =
(Cuerda+((NACA1/100)*(Cuerda-748/1000*Cuerda)*(-
Dim rule52 As Rule 2*(NACA2/10)+748/1000+1)/(1-NACA2/10)**2)-
Set rule52 = relations.CreateProgram("rule52", "", "") NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.1260*(748/1000)-
rule52.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(748/1000)))))"
PartBody\Sketch.1\Offset.88\Offset = (712/1000*Cuerda + Dim rule54 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(712/1000)- Set rule54 = relations.CreateProgram("rule54", "", "")
0.3516*(712/1000)**2+0.2843*(712/1000)**3- rule54.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
Calvo*/" & vbCrLf & _
10)**2)*((NACA2/10)-(712/1000))))) else
PartBody\Sketch.1\Offset.88\Offset = (712/1000*Cuerda + "if (784/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)- PartBody\Sketch.1\Offset.90\Offset = (784/1000*Cuerda +
0.1260*(712/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- 0.1260*(784/1000)-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(712/1000)))))" & vbCrLf 0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
&_ 10)**2)*((NACA2/10)-(784/1000))))) else

123
124
ANEXOS

PartBody\Sketch.1\Offset.90\Offset = (784/1000*Cuerda + Calvo*/" & vbCrLf & _


NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
"if (856/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(784/1000)-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- PartBody\Sketch.1\Offset.92\Offset = (856/1000*Cuerda +
0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
(NACA2/10))**2)*((NACA2/10)-(784/1000)))))" & vbCrLf 0.1260*(856/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3-
&_
0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (784/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(856/1000))))) else
PartBody\Sketch.1\Offset.120\Offset = PartBody\Sketch.1\Offset.92\Offset = (856/1000*Cuerda +
(Cuerda+((NACA1/100)*(784/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
)-784/1000)/(NACA2/10)**2)- 0.1260*(856/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
0.1260*(784/1000)- 0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- (NACA2/10))**2)*((NACA2/10)-(856/1000)))))" & vbCrLf
0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(784/1000))))) else
PartBody\Sketch.1\Offset.120\Offset = "if (856/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Cuerda+((NACA1/100)*(Cuerda-784/1000*Cuerda)*(- PartBody\Sketch.1\Offset.122\Offset =
2*(NACA2/10)+784/1000+1)/(1-NACA2/10)**2)- (Cuerda+((NACA1/100)*(856/1000*Cuerda)*(2*(NACA2/10
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- )-856/1000)/(NACA2/10)**2)-
0.1260*(784/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- 0.1260*(856/1000)-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(784/1000)))))" 0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(856/1000))))) else
Dim rule55 As Rule PartBody\Sketch.1\Offset.122\Offset =
(Cuerda+((NACA1/100)*(Cuerda-856/1000*Cuerda)*(-
Set rule55 = relations.CreateProgram("rule55", "", "") 2*(NACA2/10)+856/1000+1)/(1-NACA2/10)**2)-
rule55.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(856/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3-
"if (820/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.91\Offset = (820/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(856/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
0.1260*(820/1000)- Dim rule57 As Rule
0.3516*(820/1000)**2+0.2843*(820/1000)**3- Set rule57 = relations.CreateProgram("rule57", "", "")
0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(820/1000))))) else rule57.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.91\Offset = (820/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
0.1260*(820/1000)- "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(820/1000)**2+0.2843*(820/1000)**3- PartBody\Sketch.1\Offset.93\Offset = (892/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(820/1000)))))" & vbCrLf 0.1260*(892/1000)-
&_ 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (820/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(892/1000))))) else
PartBody\Sketch.1\Offset.121\Offset = PartBody\Sketch.1\Offset.93\Offset = (892/1000*Cuerda +
(Cuerda+((NACA1/100)*(820/1000*Cuerda)*(2*(NACA2/10 NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
)-820/1000)/(NACA2/10)**2)- 0.1260*(892/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.1260*(820/1000)- 0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- (NACA2/10))**2)*((NACA2/10)-(892/1000)))))" & vbCrLf
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(820/1000))))) else
PartBody\Sketch.1\Offset.121\Offset = "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Cuerda+((NACA1/100)*(Cuerda-820/1000*Cuerda)*(- PartBody\Sketch.1\Offset.123\Offset =
2*(NACA2/10)+820/1000+1)/(1-NACA2/10)**2)- (Cuerda+((NACA1/100)*(892/1000*Cuerda)*(2*(NACA2/10
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)- )-892/1000)/(NACA2/10)**2)-
0.1260*(820/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 0.1260*(892/1000)-
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(820/1000)))))" 0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(892/1000))))) else
Dim rule56 As Rule PartBody\Sketch.1\Offset.123\Offset =
(Cuerda+((NACA1/100)*(Cuerda-892/1000*Cuerda)*(-
Set rule56 = relations.CreateProgram("rule56", "", "") 2*(NACA2/10)+892/1000+1)/(1-NACA2/10)**2)-
rule56.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.1260*(892/1000)-

124
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 125

0.3516*(892/1000)**2+0.2843*(892/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(964/1000)-
(NACA2/10))**2)*((NACA2/10)-(892/1000)))))" 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule58 As Rule 10)**2)*((NACA2/10)-(964/1000))))) else
Set rule58 = relations.CreateProgram("rule58", "", "") PartBody\Sketch.1\Offset.125\Offset =
(Cuerda+((NACA1/100)*(Cuerda-964/1000*Cuerda)*(-
rule58.Modify "/*Rule created by Francisco Javier Jiménez 2*(NACA2/10)+964/1000+1)/(1-NACA2/10)**2)-
Calvo*/" & vbCrLf & _ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
"if (928/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(964/1000)-
PartBody\Sketch.1\Offset.94\Offset = (928/1000*Cuerda + 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- 0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(928/1000)- (NACA2/10))**2)*((NACA2/10)-(964/1000)))))"
0.3516*(928/1000)**2+0.2843*(928/1000)**3- Dim rule60 As Rule
0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(928/1000))))) else Set rule60 = relations.CreateProgram("rule60", "", "")
PartBody\Sketch.1\Offset.94\Offset = (928/1000*Cuerda + rule60.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- Calvo*/" & vbCrLf & _
0.1260*(928/1000)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- "if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((1- PartBody\Sketch.1\Offset.96\Offset = (1000/1000*Cuerda +
(NACA2/10))**2)*((NACA2/10)-(928/1000)))))" & vbCrLf NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
&_ 0.1260*(1000/1000)-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
"if (928/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2
PartBody\Sketch.1\Offset.124\Offset = /10)**2)*((NACA2/10)-(1000/1000))))) else
(Cuerda+((NACA1/100)*(928/1000*Cuerda)*(2*(NACA2/10 PartBody\Sketch.1\Offset.96\Offset = (1000/1000*Cuerda +
)-928/1000)/(NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- 0.1260*(1000/1000)-
0.1260*(928/1000)- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ (NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" & vbCrLf
10)**2)*((NACA2/10)-(928/1000))))) else &_
PartBody\Sketch.1\Offset.124\Offset =
(Cuerda+((NACA1/100)*(Cuerda-928/1000*Cuerda)*(- "if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10))
2*(NACA2/10)+928/1000+1)/(1-NACA2/10)**2)- PartBody\Sketch.1\Offset.126\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- (Cuerda+((NACA1/100)*(1000/1000*Cuerda)*(2*(NACA2/1
0.1260*(928/1000)- 0)-1000/1000)/(NACA2/10)**2)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(1000/1000)-
(NACA2/10))**2)*((NACA2/10)-(928/1000)))))" 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((NACA
Dim rule59 As Rule
2/10)**2)*((NACA2/10)-(1000/1000))))) else
Set rule59 = relations.CreateProgram("rule59", "", "") PartBody\Sketch.1\Offset.126\Offset =
(Cuerda+((NACA1/100)*(Cuerda-1000/1000*Cuerda)*(-
rule59.Modify "/*Rule created by Francisco Javier Jiménez 2*(NACA2/10)+1000/1000+1)/(1-NACA2/10)**2)-
Calvo*/" & vbCrLf & _ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(1000/1000)-
PartBody\Sketch.1\Offset.95\Offset = (964/1000*Cuerda + 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)- 0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(964/1000)- (NACA2/10))**2)*((NACA2/10)-(1000/1000)))))"
0.3516*(964/1000)**2+0.2843*(964/1000)**3- ' Se actualiza el documento y se cierra la interface
0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(964/1000))))) else CATIA.ActiveDocument.Part.Update
PartBody\Sketch.1\Offset.95\Offset = (964/1000*Cuerda + Unload Me
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
0.1260*(964/1000)- End Sub
0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(964/1000)))))" & vbCrLf
&_
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.125\Offset =
(Cuerda+((NACA1/100)*(964/1000*Cuerda)*(2*(NACA2/10
)-964/1000)/(NACA2/10)**2)-

125
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
126
alas NACA de 4 dígitos

ANEXO 3. CÓDIGO DE LA ESTRUCTURA PRINCIPAL PARA DIBUJAR UN ALA

' Para que el programa funcione bien debemos estar trabajando FlechaValor = TextBox11
en un documento .CATPart y que no existan parámetros
SemienvergaduraValor = TextBox12
' que se llamen iguales a los que creamos con nuestro programa
TorsionValor = TextBox13
ya que entrarian en conflicto. Para evitar todos
' estos problemas vamos a hacer que este programa siempre se ' Se comprueba que los valores introducidos son correctos, si
ejecute en un nuevo documento .CATPart. estos no lo están se lanza un mesaje

' De esta forma el programa pueda arrancar sin necesidad de ' de advertencia y se para el programa para que los
tener un part abierto, de forma que al ejecutarse se modifiquemos y volvamos a ejecutar el programa.

' abra un nuevo part de forma automática. ' NACA1 debe ser un número entero positivo de una cifra

' Al crearse un nuevo part cada vez que se ejecuta el programa, If NACA1Valor > -1 And NACA1Valor < 10 Then
no es necesario comprobar que estamos trabajando con Else
' archivo .CATPart ni que en dicho archivo existan ya MsgBox "El valor introducido en NACA 1 en perfil encastre
parámetros que se llamen igual que los que vamos a crear debe estar comprendido entre 0 y 9."
' ya que al ser un nuevo archivo estará totalmente vacio. End ' Este End se pone para parar el programa
' Normalmente se suele nombrar al objeto con el mismo si se encuetra el error
nombre de la orden seguida de un número para identificar End If
' rápidamente que estamos haciendo, esta es la lógica que ' NACA2 debe ser un número entero positivo de una cifra
seguiremos en nuestro programa.
If NACA2Valor > -1 And NACA2Valor < 10 Then
' Creamos y abrimos el nuevo Part
Else
Dim documents1 As Documents
MsgBox "El valor introducido en NACA 2 en perfil encastre
Dim partDocument1 As PartDocument debe estar comprendido entre 0 y 9."
Dim part1 As Part End
Set documents1 = CATIA.Documents End If
Set partDocument1 = documents1.Add("Part") ' Se carga ' NACA34 debe ser un número entero positivo este puede ir
un documento activo part para trabajar desde el 0 al 99.
Set part1 = partDocument1.Part ' Se establece el If NACA34Valor > -1 And NACA34Valor < 100 Then
part1 como entorno para trabajar
Else
' Activamos las relaciones y parámetros
MsgBox "El valor introducido en NACA 34 en perfil encastre
Dim relations As relations debe estar comprendido entre 0 y 99."
Dim parameters As parameters End
Set relations = part1.relations End If
Set parameters = part1.parameters ' NACA1 raiz debe ser un número entero positivo de una cifra
' Asignamos los valores introducidos a cada parámetro If NACA1TValor > -1 And NACA1Valor < 10 Then
NACA1Valor = TextBox1 Else
NACA2Valor = TextBox2 MsgBox "El valor introducido en NACA 1 en perfil raiz debe
NACA34Valor = TextBox3 estar comprendido entre 0 y 9."

CuerdaValor = TextBox4 End ' Este End se pone para parar el programa
si se encuetra el error
NACA1TValor = TextBox5
End If
NACA2TValor = TextBox6
' NACA2 raiz debe ser un número entero positivo de una cifra
NACA34TValor = TextBox7
If NACA2TValor > -1 And NACA2Valor < 10 Then
EstrechamientoValor = TextBox8
Else
IncidenciaValor = TextBox9
MsgBox "El valor introducido en NACA 2 en perfil raiz debe
DiedroValor = TextBox10 estar comprendido entre 0 y 9."

126
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 127

End comprendido entre 0 y 100."


End If End
' NACA34 raiz debe ser un número entero positivo este puede End If
ir desde el 0 al 99.
If TorsiónValor > -0.001 And TorsiónValor < 45 Then
If NACA34TValor > -1 And NACA34Valor < 100 Then
Else
Else
MsgBox "El valor introducido en Torsión debe estar
MsgBox "El valor introducido en NACA 34 en perfil raiz debe comprendido entre 0 y 45."
estar comprendido entre 0 y 99."
End
End
End If
End If
' Creamos los parámetros
' Cuerda debe ser un número entero positivo mayor que 0
Dim NACA1 As Parameter
If CuerdaValor > 0 Then
Set NACA1 = parameters.CreateInteger("NACA1", 0)
Else
Dim NACA2 As Parameter
MsgBox "El valor introducido en Cuerda debe ser mayor que
0." Set NACA2 = parameters.CreateInteger("NACA2", 0)

End Dim NACA34 As Parameter

End If Set NACA34 = parameters.CreateInteger("NACA34", 0)

If DiedroValor > -46 And DiedroValor < 46 Then Dim NACA1T As Parameter
Set NACA1T = parameters.CreateInteger("NACA1T", 0)
Else
MsgBox "El valor introducido en Diedro debe estar Dim NACA2T As Parameter
comprendido entre -45º y 45º." Set NACA2T = parameters.CreateInteger("NACA2T", 0)
End Dim NACA34T As Parameter
End If Set NACA34T = parameters.CreateInteger("NACA34T", 0)
If IncidenciaValor > -0.001 And IncidenciaValor < 46 Then Dim Cuerda As Parameter
Else Set Cuerda = parameters.CreateDimension("Cuerda",
MsgBox "El valor introducido en Incidencia debe estar "LENGTH", 0)
comprendido entre 0º y 45º." Dim Diedro As Parameter
End Set Diedro = parameters.CreateDimension("Diedro",
End If "ANGLE", 0)

If FlechaValor > -0.001 And FlechaValor < 46 Then Dim Incidencia As Parameter

Else Set Incidencia = parameters.CreateDimension("Incidencia",


"ANGLE", 0)
MsgBox "El valor introducido en Flecha debe estar
comprendido entre 0º y 45º." Dim Flecha As Parameter

End Set Flecha = parameters.CreateDimension("Flecha",


"ANGLE", 0)
End If
Dim Semienvergadura As Parameter
If SemienvergaduraValor > 0 Then
Set Semienvergadura =
Else parameters.CreateDimension("Semienvergadura",
"LENGTH", 0)
MsgBox "El valor introducido en Semienvergadura debe ser
mayor que 0." Dim Estrechamiento As Parameter
End Set Estrechamiento =
parameters.CreateInteger("Estrechamiento", 0)
End If
Dim Torsion As Parameter
' Estrechamiento debe ser un numero entre 0 y 100 ya que
refleja el % de reducción de la cuerda en la punta del ala. Set Torsion = parameters.CreateDimension("Torsion",
"ANGLE", 0)
If EstrechamientoValor > -0.001 And EstrechamientoValor <
101 Then ' Asignamos el valor correspondiente a cada parámetro
Else NACA1.Value = NACA1Valor
MsgBox "El valor introducido en Estrechamiento debe estar NACA2.Value = NACA2Valor

127
128
ANEXOS

NACA34.Value = NACA34Valor unidad y en el plano Y


NACA1T.Value = NACA1TValor arrayOfVariantOfDouble1(5) = 0# ' Establece el vector
unidad z en el plano Y
NACA2T.Value = NACA2TValor
arrayOfVariantOfDouble1(6) = 0# ' Establece el vector
NACA34T.Value = NACA34TValor unidad x en el plano Z
Cuerda.Value = CuerdaValor arrayOfVariantOfDouble1(7) = 0# ' Establece el vector
Diedro.Value = DiedroValor unidad y en el plano Z

Flecha.Value = FlechaValor arrayOfVariantOfDouble1(8) = 1# ' Establece el vector


unidad z en el plano Z
Semienvergadura.Value = SemienvergaduraValor
Set sketch1Variant = sketch1
Estrechamiento.Value = EstrechamientoValor
sketch1Variant.SetAbsoluteAxisData
Torsion.Value = TorsionValor arrayOfVariantOfDouble1 'Sistema absoluto 3D para el sketch
Incidencia.Value = IncidenciaValor part1.InWorkObject = sketch1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Establecimiento del conjunto de herramientas 2D y asignarlo
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' al sketch de trabajo
''''' PERFIL ENCASTRE ALA ''''' Dim factory2D1 As Factory2D
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set factory2D1 = sketch1.OpenEdition()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Se establecen los elementos geométricos
' Ahora debemos crear 60 puntos, 30 para extradós y 30 para Dim geometricElements1 As GeometricElements
intradós
Set geometricElements1 = sketch1.GeometricElements
' Definimos el entorno de trabajo
' Se define el sistema de ejes dentro del sketch
Dim bodies1 As Bodies
Dim axis2D1 As Axis2D
Dim body1 As Body
Set axis2D1 = geometricElements1.Item("AbsoluteAxis")
Dim sketches1 As Sketches
' Establecimiento de las direcciones horizontal y vertical
Dim originElements1 As OriginElements
Dim line2D1 As Line2D
Dim reference1 As Reference
Set line2D1 = axis2D1.GetItem("HDirection")
Dim sketch1 As Sketch
line2D1.ReportName = 1
' Establecimiento del entorno de trabajo
Dim line2D2 As Line2D
Set bodies1 = part1.Bodies
Set line2D2 = axis2D1.GetItem("VDirection")
Set body1 = bodies1.Item("PartBody") ' Se activa el body1
como body de trabajo line2D2.ReportName = 2

Set sketches1 = body1.Sketches ' Se establece el sketch ' Definimos los puntos con unos valores distribuidos
uniformemente. Estos valores
Set originElements1 = part1.OriginElements ' Sistema de
referencia 3D ' no son los definitivos ya que estos seran modificados con la
rule.
Set reference1 = originElements1.PlaneYZ ' Se establece el
plano YZ como plano de trabajo Dim point2D1 As ControlPoint2D

Set sketch1 = sketches1.Add(reference1) ' Toma la Set point2D1 = factory2D1.CreateControlPoint(99999999#,


referencia1 como referencia para trabajar CuerdaValor)

' Trabajamos en el plano yz point2D1.ReportName = 2 + 1

Dim arrayOfVariantOfDouble1(8) Dim point2D2 As ControlPoint2D

arrayOfVariantOfDouble1(0) = 0# ' Establece el vector Set point2D2 = factory2D1.CreateControlPoint(99999999#,


unidad x en el plano X CuerdaValor)

arrayOfVariantOfDouble1(1) = 0# ' Establece el vector point2D2.ReportName = 2 + 2


unidad y en el plano X Dim point2D3 As ControlPoint2D
arrayOfVariantOfDouble1(2) = 0# ' Establece el vector Set point2D3 = factory2D1.CreateControlPoint(99999999#,
unidad z en el plano X CuerdaValor)
arrayOfVariantOfDouble1(3) = 0# ' Establece el vector point2D3.ReportName = 2 + 3
unidad x en el plano Y
Dim point2D4 As ControlPoint2D
arrayOfVariantOfDouble1(4) = 1# ' Establece el vector

128
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 129

Set point2D4 = factory2D1.CreateControlPoint(99999999#, Set point2D16 = factory2D1.CreateControlPoint(99999999#,


CuerdaValor) CuerdaValor)
point2D4.ReportName = 2 + 4 point2D16.ReportName = 2 + 16
Dim point2D5 As ControlPoint2D Dim point2D17 As ControlPoint2D
Set point2D5 = factory2D1.CreateControlPoint(99999999#, Set point2D17 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D5.ReportName = 2 + 5 point2D17.ReportName = 2 + 17
Dim point2D6 As ControlPoint2D Dim point2D18 As ControlPoint2D
Set point2D6 = factory2D1.CreateControlPoint(99999999#, Set point2D18 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D6.ReportName = 2 + 6 point2D18.ReportName = 2 + 18
Dim point2D7 As ControlPoint2D Dim point2D19 As ControlPoint2D
Set point2D7 = factory2D1.CreateControlPoint(99999999#, Set point2D19 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D7.ReportName = 2 + 7 point2D19.ReportName = 2 + 19
Dim point2D8 As ControlPoint2D Dim point2D20 As ControlPoint2D
Set point2D8 = factory2D1.CreateControlPoint(99999999#, Set point2D20 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D8.ReportName = 2 + 8 point2D20.ReportName = 2 + 20
Dim point2D9 As ControlPoint2D Dim point2D21 As ControlPoint2D
Set point2D9 = factory2D1.CreateControlPoint(99999999#, Set point2D21 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D9.ReportName = 2 + 9 point2D21.ReportName = 2 + 21
Dim point2D10 As ControlPoint2D Dim point2D22 As ControlPoint2D
Set point2D10 = factory2D1.CreateControlPoint(99999999#, Set point2D22 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D10.ReportName = 2 + 10 point2D22.ReportName = 2 + 22
Dim point2D11 As ControlPoint2D Dim point2D23 As ControlPoint2D
Set point2D11 = factory2D1.CreateControlPoint(99999999#, Set point2D23 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D11.ReportName = 2 + 11 point2D23.ReportName = 2 + 23
Dim point2D12 As ControlPoint2D Dim point2D24 As ControlPoint2D
Set point2D12 = factory2D1.CreateControlPoint(99999999#, Set point2D24 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D12.ReportName = 2 + 12 point2D24.ReportName = 2 + 24
Dim point2D13 As ControlPoint2D Dim point2D25 As ControlPoint2D
Set point2D13 = factory2D1.CreateControlPoint(99999999#, Set point2D25 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D13.ReportName = 2 + 13 point2D25.ReportName = 2 + 25
Dim point2D14 As ControlPoint2D Dim point2D26 As ControlPoint2D
Set point2D14 = factory2D1.CreateControlPoint(99999999#, Set point2D26 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D14.ReportName = 2 + 14 point2D26.ReportName = 2 + 26
Dim point2D15 As ControlPoint2D Dim point2D27 As ControlPoint2D
Set point2D15 = factory2D1.CreateControlPoint(99999999#, Set point2D27 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) CuerdaValor)
point2D15.ReportName = 2 + 15 point2D27.ReportName = 2 + 27
Dim point2D16 As ControlPoint2D Dim point2D28 As ControlPoint2D

129
130
ANEXOS

Set point2D28 = factory2D1.CreateControlPoint(99999999#, Dim point2D40 As ControlPoint2D


CuerdaValor)
Set point2D40 = factory2D1.CreateControlPoint(99999999#,
point2D28.ReportName = 2 + 28 CuerdaValor)
Dim point2D29 As ControlPoint2D point2D40.ReportName = 2 + 40
Set point2D29 = factory2D1.CreateControlPoint(99999999#, Dim point2D41 As ControlPoint2D
CuerdaValor)
Set point2D41 = factory2D1.CreateControlPoint(99999999#,
point2D29.ReportName = 2 + 29 CuerdaValor)
Dim point2D30 As ControlPoint2D point2D41.ReportName = 2 + 41
Set point2D30 = factory2D1.CreateControlPoint(99999999#, Dim point2D42 As ControlPoint2D
CuerdaValor)
Set point2D42 = factory2D1.CreateControlPoint(99999999#,
point2D30.ReportName = 2 + 30 CuerdaValor)
Dim point2D31 As ControlPoint2D point2D42.ReportName = 2 + 42
Set point2D31 = factory2D1.CreateControlPoint(99999999#, Dim point2D43 As ControlPoint2D
CuerdaValor)
Set point2D43 = factory2D1.CreateControlPoint(99999999#,
point2D31.ReportName = 2 + 31 CuerdaValor)
Dim point2D32 As ControlPoint2D point2D43.ReportName = 2 + 43
Set point2D32 = factory2D1.CreateControlPoint(99999999#, Dim point2D44 As ControlPoint2D
CuerdaValor)
Set point2D44 = factory2D1.CreateControlPoint(99999999#,
point2D32.ReportName = 2 + 32 CuerdaValor)
Dim point2D33 As ControlPoint2D point2D44.ReportName = 2 + 44
Set point2D33 = factory2D1.CreateControlPoint(99999999#, Dim point2D45 As ControlPoint2D
CuerdaValor)
Set point2D45 = factory2D1.CreateControlPoint(99999999#,
point2D33.ReportName = 2 + 33 CuerdaValor)
Dim point2D34 As ControlPoint2D point2D45.ReportName = 2 + 45
Set point2D34 = factory2D1.CreateControlPoint(99999999#, Dim point2D46 As ControlPoint2D
CuerdaValor)
Set point2D46 = factory2D1.CreateControlPoint(99999999#,
point2D34.ReportName = 2 + 34 CuerdaValor)
Dim point2D35 As ControlPoint2D point2D46.ReportName = 2 + 46
Set point2D35 = factory2D1.CreateControlPoint(99999999#, Dim point2D47 As ControlPoint2D
CuerdaValor)
Set point2D47 = factory2D1.CreateControlPoint(99999999#,
point2D35.ReportName = 2 + 35 CuerdaValor)
Dim point2D36 As ControlPoint2D point2D47.ReportName = 2 + 47
Set point2D36 = factory2D1.CreateControlPoint(99999999#, Dim point2D48 As ControlPoint2D
CuerdaValor)
Set point2D48 = factory2D1.CreateControlPoint(99999999#,
point2D36.ReportName = 2 + 36 CuerdaValor)
Dim point2D37 As ControlPoint2D point2D48.ReportName = 2 + 48
Set point2D37 = factory2D1.CreateControlPoint(99999999#, Dim point2D49 As ControlPoint2D
CuerdaValor)
Set point2D49 = factory2D1.CreateControlPoint(99999999#,
point2D37.ReportName = 2 + 37 CuerdaValor)
Dim point2D38 As ControlPoint2D point2D49.ReportName = 2 + 49
Set point2D38 = factory2D1.CreateControlPoint(99999999#, Dim point2D50 As ControlPoint2D
CuerdaValor)
Set point2D50 = factory2D1.CreateControlPoint(99999999#,
point2D38.ReportName = 2 + 38 CuerdaValor)
Dim point2D39 As ControlPoint2D point2D50.ReportName = 2 + 50
Set point2D39 = factory2D1.CreateControlPoint(99999999#, Dim point2D51 As ControlPoint2D
CuerdaValor)
Set point2D51 = factory2D1.CreateControlPoint(99999999#,
point2D39.ReportName = 2 + 39 CuerdaValor)

130
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 131

point2D51.ReportName = 2 + 51 Set point2D61 =


factory2D1.CreateControlPoint(SemienvergaduraValor,
Dim point2D52 As ControlPoint2D
CuerdaValor)
Set point2D52 = factory2D1.CreateControlPoint(99999999#, point2D61.ReportName = 63
CuerdaValor)
Dim point2D62 As Point2D
point2D52.ReportName = 2 + 52
Set point2D62 =
Dim point2D53 As ControlPoint2D
factory2D1.CreatePoint(SemienvergaduraValor,
Set point2D53 = factory2D1.CreateControlPoint(99999999#, SemienvergaduraValor)
CuerdaValor) point2D62.ReportName = 64
point2D53.ReportName = 2 + 53 point2D62.Construction = False
Dim point2D54 As ControlPoint2D
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set point2D54 = factory2D1.CreateControlPoint(99999999#, '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
CuerdaValor)
''' INCIDENCIA '''
point2D54.ReportName = 2 + 54
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim point2D55 As ControlPoint2D
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set point2D55 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) ' Los perfiles suelen tener una incidencia, ángulo, respecto a la
horizontal, por lo que crearemos unas nuevas
point2D55.ReportName = 2 + 55
' lineas de referencia que formen un ángulo igual a la
Dim point2D56 As ControlPoint2D
incedencia y posteriormente acotaremos sobre estas lineas.
Set point2D56 = factory2D1.CreateControlPoint(99999999#, ' Creamos las lineas que utilizaremos como referencia.
CuerdaValor) Comenzamos por la "vertical".
point2D56.ReportName = 2 + 56 ' En primer lugar acotamos y parametrizamos el punto del
Dim point2D57 As ControlPoint2D borde de ataque.

Set point2D57 = factory2D1.CreateControlPoint(99999999#, Dim constraints1 As constraints


CuerdaValor) Set constraints1 = sketch1.constraints
point2D57.ReportName = 2 + 57 Dim reference2 As Reference
Dim point2D58 As ControlPoint2D Set reference2 = part1.CreateReferenceFromObject(line2D2)
Set point2D58 = factory2D1.CreateControlPoint(99999999#, 'Referencia al eje vertical
CuerdaValor) Dim reference3 As Reference
point2D58.ReportName = 2 + 58 Set reference3 = part1.CreateReferenceFromObject(line2D1)
Dim point2D59 As ControlPoint2D 'Referencia al eje horizontal

Set point2D59 = factory2D1.CreateControlPoint(99999999#, Dim reference4 As Reference


CuerdaValor) Set reference4 =
point2D59.ReportName = 2 + 59 part1.CreateReferenceFromObject(point2D62) 'Punto de
construcción
Dim point2D60 As ControlPoint2D
Dim constraint1 As Constraint
Set point2D60 = factory2D1.CreateControlPoint(99999999#,
CuerdaValor) Set constraint1 =
constraints1.AddBiEltCst(catCstTypeDistance, reference2,
point2D60.ReportName = 2 + 60 reference4)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' constraint1.Mode = catCstModeDrivingDimension
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim length1 As Length
' Creamos el punto del borde de ataque tanto como control Set length1 = constraint1.Dimension
point
Dim formula1 As Formula
' como punto (pero de construcción) ya que este ultimo
Set formula1 = relations.CreateFormula("Punto borde de
' lo necesitamos para parametrizar las lineas de referencia para ataque", "Borde de ataque", length1, "Semienvergadura")
poner la incidencia a nuestro perfil.
Dim constraint2 As Constraint
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set constraint2 =
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' constraints1.AddBiEltCst(catCstTypeDistance, reference3,
Dim point2D61 As ControlPoint2D reference4)
constraint2.Mode = catCstModeDrivingDimension

131
132
ANEXOS

Dim length2 As Length ' Linea "horizontal de referencia".


Set length2 = constraint2.Dimension Dim point2D65 As Point2D
Dim formula2 As Formula Set point2D65 = factory2D1.CreatePoint(-7000, 7000)
Set formula2 = relations.CreateFormula("Punto borde de point2D65.ReportName = 68
ataque", "Borde de ataque", length2, "Semienvergadura")
Dim point2D66 As Point2D
' Se crean los puntos de interes para crear los ejes de
coordenadas rotados. Set point2D66 = factory2D1.CreatePoint(7000, -7000)

Dim point2D63 As Point2D point2D66.ReportName = 69

Set point2D63 = factory2D1.CreatePoint(-7000#, -7000#) Dim line2D4 As Line2D

point2D63.ReportName = 65 Set line2D4 = factory2D1.CreateLine(-7000, 7000, 7000, -


7000)
Dim point2D64 As Point2D
line2D4.ReportName = 70
Set point2D64 = factory2D1.CreatePoint(7000#, 7000#)
line2D4.Construction = True
point2D64.ReportName = 66
line2D4.StartPoint = point2D65
' Se crea la linea
line2D4.EndPoint = point2D66
Dim line2D3 As Line2D
Dim reference8 As Reference
Set line2D3 = factory2D1.CreateLine(-7000#, -7000#, 7000#,
7000#) Set reference8 = part1.CreateReferenceFromObject(line2D4)

line2D3.ReportName = 67 Dim constraint5 As Constraint


Set constraint5 =
line2D3.Construction = True
constraints1.AddBiEltCst(catCstTypePerpendicularity,
line2D3.StartPoint = point2D63 reference8, reference6)
line2D3.EndPoint = point2D64 constraint5.Mode = catCstModeDrivingDimension
' Acotamos la linea. En primer lugar que forme un ángulo con Dim constraint6 As Constraint
la dirección vertical y en segundo
Set constraint6 =
' lugar que sea coincidente con el punto del borde de ataque. constraints1.AddBiEltCst(catCstTypeDistance, reference7,
reference8)
Dim reference5 As Reference
constraint6.Mode = catCstModeDrivingDimension
Set reference5 = part1.CreateReferenceFromObject(line2D3)
Dim length6 As Length
Dim constraint3 As Constraint
Set length6 = constraint6.Dimension
Set constraint3 = constraints1.AddBiEltCst(catCstTypeAngle,
reference5, reference2) Dim formula4 As Formula
constraint3.Mode = catCstModeDrivingDimension Set formula4 = relations.CreateFormula("Linea referencia
horizontal Incidencia", "Referencia horizontal Incidencia",
constraint3.AngleSector = catCstAngleSector0 length6, "Semienvergadura")
Dim angle3 As Angle ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set angle3 = constraint3.Dimension ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim formula3 As Formula ' Definimos las constraints de todos los puntos acotando estos
Set formula3 = relations.CreateFormula("Linea referencia en distancias a ambas direcciones del sketch.
vertical Incidencia", "Incidencia", angle3, "Incidencia") ' Debemos seguir una lógica para acotar los puntos ya que esta
Dim reference6 As Reference afectará a nuestra Rule.

Set reference6 = part1.CreateReferenceFromObject(line2D3) ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


'vertical cambiada ''' En primer lugar vamos a acotar los puntos del Extradós
Dim reference7 As Reference por su distancia al eje vertical '''

Set reference7 = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


part1.CreateReferenceFromObject(point2D62) 'Punto Dim reference9 As Reference
construcción borde ataque
Set reference9 = part1.CreateReferenceFromObject(point2D1)
Dim constraint4 As Constraint
Dim constraint7 As Constraint
Set constraint4 = constraints1.AddBiEltCst(catCstTypeOn,
reference6, reference7) 'Constraint de coincidencia Set constraint7 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
constraint4.Mode = catCstModeDrivingDimension

132
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 133

reference9) Dim reference16 As Reference


constraint7.Mode = catCstModeDrivingDimension Set reference16 =
part1.CreateReferenceFromObject(point2D8)
Dim reference10 As Reference
Dim constraint14 As Constraint
Set reference10 =
part1.CreateReferenceFromObject(point2D2) Set constraint14 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint8 As Constraint
reference16)
Set constraint8 = constraint14.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference10) Dim reference17 As Reference
constraint8.Mode = catCstModeDrivingDimension Set reference17 =
part1.CreateReferenceFromObject(point2D9)
Dim reference11 As Reference
Dim constraint15 As Constraint
Set reference11 =
part1.CreateReferenceFromObject(point2D3) Set constraint15 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint9 As Constraint reference17)
Set constraint9 = constraint15.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference11) Dim reference18 As Reference
constraint9.Mode = catCstModeDrivingDimension Set reference18 =
part1.CreateReferenceFromObject(point2D10)
Dim reference12 As Reference
Dim constraint16 As Constraint
Set reference12 =
part1.CreateReferenceFromObject(point2D4) Set constraint16 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint10 As Constraint reference18)
Set constraint10 = constraint16.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference12) Dim reference19 As Reference
constraint10.Mode = catCstModeDrivingDimension Set reference19 =
part1.CreateReferenceFromObject(point2D11)
Dim reference13 As Reference
Dim constraint17 As Constraint
Set reference13 =
part1.CreateReferenceFromObject(point2D5) Set constraint17 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint11 As Constraint reference19)
Set constraint11 = constraint17.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference13) Dim reference20 As Reference
constraint11.Mode = catCstModeDrivingDimension Set reference20 =
part1.CreateReferenceFromObject(point2D12)
Dim reference14 As Reference
Dim constraint18 As Constraint
Set reference14 =
part1.CreateReferenceFromObject(point2D6) Set constraint18 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint12 As Constraint reference20)
Set constraint12 = constraint18.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference14) Dim reference21 As Reference
constraint12.Mode = catCstModeDrivingDimension Set reference21 =
part1.CreateReferenceFromObject(point2D13)
Dim reference15 As Reference
Dim constraint19 As Constraint
Set reference15 =
part1.CreateReferenceFromObject(point2D7) Set constraint19 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint13 As Constraint reference21)
Set constraint13 =
constraint19.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference15) Dim reference22 As Reference
constraint13.Mode = catCstModeDrivingDimension Set reference22 =

133
134
ANEXOS

part1.CreateReferenceFromObject(point2D14) Set constraint26 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint20 As Constraint
reference28)
Set constraint20 = constraint26.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference22) Dim reference29 As Reference
constraint20.Mode = catCstModeDrivingDimension Set reference29 =
part1.CreateReferenceFromObject(point2D21)
Dim reference23 As Reference
Dim constraint27 As Constraint
Set reference23 =
part1.CreateReferenceFromObject(point2D15) Set constraint27 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint21 As Constraint reference29)
Set constraint21 = constraint27.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference23) Dim reference30 As Reference
constraint21.Mode = catCstModeDrivingDimension Set reference30 =
part1.CreateReferenceFromObject(point2D22)
Dim reference24 As Reference
Dim constraint28 As Constraint
Set reference24 =
part1.CreateReferenceFromObject(point2D16) Set constraint28 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint22 As Constraint reference30)
Set constraint22 = constraint28.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference24) Dim reference31 As Reference
constraint22.Mode = catCstModeDrivingDimension Set reference31 =
part1.CreateReferenceFromObject(point2D23)
Dim reference25 As Reference
Dim constraint29 As Constraint
Set reference25 =
part1.CreateReferenceFromObject(point2D17) Set constraint29 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint23 As Constraint reference31)
Set constraint23 = constraint29.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference25) Dim reference32 As Reference
constraint23.Mode = catCstModeDrivingDimension Set reference32 =
part1.CreateReferenceFromObject(point2D24)
Dim reference26 As Reference
Dim constraint30 As Constraint
Set reference26 =
part1.CreateReferenceFromObject(point2D18) Set constraint30 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint24 As Constraint reference32)
Set constraint24 = constraint30.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference26) Dim reference33 As Reference
constraint24.Mode = catCstModeDrivingDimension Set reference33 =
part1.CreateReferenceFromObject(point2D25)
Dim reference27 As Reference
Dim constraint31 As Constraint
Set reference27 =
part1.CreateReferenceFromObject(point2D19) Set constraint31 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint25 As Constraint reference33)
Set constraint25 =
constraint31.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference27) Dim reference34 As Reference
constraint25.Mode = catCstModeDrivingDimension Set reference34 =
part1.CreateReferenceFromObject(point2D26)
Dim reference28 As Reference
Dim constraint32 As Constraint
Set reference28 =
part1.CreateReferenceFromObject(point2D20) Set constraint32 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint26 As Constraint

134
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 135

reference34) Set constraint38 =


constraints1.AddBiEltCst(catCstTypeDistance, reference8,
constraint32.Mode = catCstModeDrivingDimension
reference40)
Dim reference35 As Reference constraint38.Mode = catCstModeDrivingDimension
Set reference35 = Dim reference41 As Reference
part1.CreateReferenceFromObject(point2D27)
Set reference41 =
Dim constraint33 As Constraint
part1.CreateReferenceFromObject(point2D3)
Set constraint33 = Dim constraint39 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference35) Set constraint39 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
constraint33.Mode = catCstModeDrivingDimension reference41)
Dim reference36 As Reference constraint39.Mode = catCstModeDrivingDimension
Set reference36 = Dim reference42 As Reference
part1.CreateReferenceFromObject(point2D28)
Set reference42 =
Dim constraint34 As Constraint part1.CreateReferenceFromObject(point2D4)
Set constraint34 = Dim constraint40 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference36) Set constraint40 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
constraint34.Mode = catCstModeDrivingDimension reference42)
Dim reference37 As Reference constraint40.Mode = catCstModeDrivingDimension
Set reference37 = Dim reference43 As Reference
part1.CreateReferenceFromObject(point2D29)
Set reference43 =
Dim constraint35 As Constraint part1.CreateReferenceFromObject(point2D5)
Set constraint35 = Dim constraint41 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference37) Set constraint41 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
constraint35.Mode = catCstModeDrivingDimension reference43)
Dim reference38 As Reference constraint41.Mode = catCstModeDrivingDimension
Set reference38 = Dim reference44 As Reference
part1.CreateReferenceFromObject(point2D30)
Set reference44 =
Dim constraint36 As Constraint part1.CreateReferenceFromObject(point2D6)
Set constraint36 = Dim constraint42 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference38) Set constraint42 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
constraint36.Mode = catCstModeDrivingDimension reference44)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' constraint42.Mode = catCstModeDrivingDimension
'En segundo lugar vamos a acotar los puntos del Extradós por Dim reference45 As Reference
su distancia al eje horizontal
Set reference45 =
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.CreateReferenceFromObject(point2D7)
Dim reference39 As Reference Dim constraint43 As Constraint
Set reference39 = Set constraint43 =
part1.CreateReferenceFromObject(point2D1) constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint37 As Constraint reference45)

Set constraint37 = constraint43.Mode = catCstModeDrivingDimension


constraints1.AddBiEltCst(catCstTypeDistance, reference8, Dim reference46 As Reference
reference39)
Set reference46 =
constraint37.Mode = catCstModeDrivingDimension part1.CreateReferenceFromObject(point2D8)
Dim reference40 As Reference
Dim constraint44 As Constraint
Set reference40 = Set constraint44 =
part1.CreateReferenceFromObject(point2D2) constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint38 As Constraint reference46)

135
136
ANEXOS

constraint44.Mode = catCstModeDrivingDimension Set reference53 =


part1.CreateReferenceFromObject(point2D15)
Dim reference47 As Reference
Dim constraint51 As Constraint
Set reference47 =
part1.CreateReferenceFromObject(point2D9) Set constraint51 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint45 As Constraint reference53)
Set constraint45 =
constraint51.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference47) Dim reference54 As Reference
constraint45.Mode = catCstModeDrivingDimension Set reference54 =
part1.CreateReferenceFromObject(point2D16)
Dim reference48 As Reference
Dim constraint52 As Constraint
Set reference48 =
part1.CreateReferenceFromObject(point2D10) Set constraint52 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint46 As Constraint reference54)
Set constraint46 = constraint52.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference48) Dim reference55 As Reference
constraint46.Mode = catCstModeDrivingDimension Set reference55 =
part1.CreateReferenceFromObject(point2D17)
Dim reference49 As Reference
Dim constraint53 As Constraint
Set reference49 =
part1.CreateReferenceFromObject(point2D11) Set constraint53 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint47 As Constraint reference55)
Set constraint47 = constraint53.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference49) Dim reference56 As Reference
constraint47.Mode = catCstModeDrivingDimension Set reference56 =
part1.CreateReferenceFromObject(point2D18)
Dim reference50 As Reference
Dim constraint54 As Constraint
Set reference50 =
part1.CreateReferenceFromObject(point2D12) Set constraint54 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint48 As Constraint reference56)
Set constraint48 = constraint54.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference50) Dim reference57 As Reference
constraint48.Mode = catCstModeDrivingDimension Set reference57 =
part1.CreateReferenceFromObject(point2D19)
Dim reference51 As Reference
Dim constraint55 As Constraint
Set reference51 =
part1.CreateReferenceFromObject(point2D13) Set constraint55 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint49 As Constraint reference57)
Set constraint49 = constraint55.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference51) Dim reference58 As Reference
constraint49.Mode = catCstModeDrivingDimension Set reference58 =
part1.CreateReferenceFromObject(point2D20)
Dim reference52 As Reference
Dim constraint56 As Constraint
Set reference52 =
part1.CreateReferenceFromObject(point2D14) Set constraint56 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint50 As Constraint reference58)
Set constraint50 = constraint56.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference52) Dim reference59 As Reference
constraint50.Mode = catCstModeDrivingDimension Set reference59 =
part1.CreateReferenceFromObject(point2D21)
Dim reference53 As Reference

136
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 137

Dim constraint57 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,


reference65)
Set constraint57 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint63.Mode = catCstModeDrivingDimension
reference59)
Dim reference66 As Reference
constraint57.Mode = catCstModeDrivingDimension
Set reference66 =
Dim reference60 As Reference part1.CreateReferenceFromObject(point2D28)
Set reference60 = Dim constraint64 As Constraint
part1.CreateReferenceFromObject(point2D22)
Set constraint64 =
Dim constraint58 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference66)
Set constraint58 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint64.Mode = catCstModeDrivingDimension
reference60)
Dim reference67 As Reference
constraint58.Mode = catCstModeDrivingDimension
Set reference67 =
Dim reference61 As Reference part1.CreateReferenceFromObject(point2D29)
Set reference61 = Dim constraint65 As Constraint
part1.CreateReferenceFromObject(point2D23)
Set constraint65 =
Dim constraint59 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference67)
Set constraint59 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint65.Mode = catCstModeDrivingDimension
reference61)
Dim reference68 As Reference
constraint59.Mode = catCstModeDrivingDimension
Set reference68 =
Dim reference62 As Reference part1.CreateReferenceFromObject(point2D30)
Set reference62 = Dim constraint66 As Constraint
part1.CreateReferenceFromObject(point2D24)
Set constraint66 =
Dim constraint60 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference68)
Set constraint60 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint66.Mode = catCstModeDrivingDimension
reference62)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint60.Mode = catCstModeDrivingDimension
'En tercer lugar vamos a acotar los puntos del Intradós por su
Dim reference63 As Reference distancia al eje vertical
Set reference63 = ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.CreateReferenceFromObject(point2D25)
Dim reference69 As Reference
Dim constraint61 As Constraint
Set reference69 =
Set constraint61 = part1.CreateReferenceFromObject(point2D31)
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference63) Dim constraint67 As Constraint

constraint61.Mode = catCstModeDrivingDimension Set constraint67 =


constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim reference64 As Reference reference69)
Set reference64 = constraint67.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D26)
Dim reference70 As Reference
Dim constraint62 As Constraint
Set reference70 =
Set constraint62 = part1.CreateReferenceFromObject(point2D32)
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint68 As Constraint
reference64)
constraint62.Mode = catCstModeDrivingDimension Set constraint68 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim reference65 As Reference reference70)
Set reference65 = constraint68.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D27)
Dim reference71 As Reference
Dim constraint63 As Constraint
Set reference71 =
Set constraint63 = part1.CreateReferenceFromObject(point2D33)

137
138
ANEXOS

Dim constraint69 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,


reference77)
Set constraint69 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint75.Mode = catCstModeDrivingDimension
reference71)
Dim reference78 As Reference
constraint69.Mode = catCstModeDrivingDimension
Set reference78 =
Dim reference72 As Reference part1.CreateReferenceFromObject(point2D40)
Set reference72 = Dim constraint76 As Constraint
part1.CreateReferenceFromObject(point2D34)
Set constraint76 =
Dim constraint70 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference78)
Set constraint70 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint76.Mode = catCstModeDrivingDimension
reference72)
Dim reference79 As Reference
constraint70.Mode = catCstModeDrivingDimension
Set reference79 =
Dim reference73 As Reference part1.CreateReferenceFromObject(point2D41)
Set reference73 = Dim constraint77 As Constraint
part1.CreateReferenceFromObject(point2D35)
Set constraint77 =
Dim constraint71 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference79)
Set constraint71 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint77.Mode = catCstModeDrivingDimension
reference73)
Dim reference80 As Reference
constraint71.Mode = catCstModeDrivingDimension
Set reference80 =
Dim reference74 As Reference part1.CreateReferenceFromObject(point2D42)
Set reference74 = Dim constraint78 As Constraint
part1.CreateReferenceFromObject(point2D36)
Set constraint78 =
Dim constraint72 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference80)
Set constraint72 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint78.Mode = catCstModeDrivingDimension
reference74)
Dim reference81 As Reference
constraint72.Mode = catCstModeDrivingDimension
Set reference81 =
Dim reference75 As Reference part1.CreateReferenceFromObject(point2D43)
Set reference75 = Dim constraint79 As Constraint
part1.CreateReferenceFromObject(point2D37)
Set constraint79 =
Dim constraint73 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference81)
Set constraint73 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint79.Mode = catCstModeDrivingDimension
reference75)
Dim reference82 As Reference
constraint73.Mode = catCstModeDrivingDimension
Set reference82 =
Dim reference76 As Reference part1.CreateReferenceFromObject(point2D44)
Set reference76 = Dim constraint80 As Constraint
part1.CreateReferenceFromObject(point2D38)
Set constraint80 =
Dim constraint74 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference82)
Set constraint74 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, constraint80.Mode = catCstModeDrivingDimension
reference76)
Dim reference83 As Reference
constraint74.Mode = catCstModeDrivingDimension
Set reference83 =
Dim reference77 As Reference part1.CreateReferenceFromObject(point2D45)
Set reference77 = Dim constraint81 As Constraint
part1.CreateReferenceFromObject(point2D39)
Set constraint81 =
Dim constraint75 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference83)
Set constraint75 =

138
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 139

constraint81.Mode = catCstModeDrivingDimension Set reference90 =


part1.CreateReferenceFromObject(point2D52)
Dim reference84 As Reference
Dim constraint88 As Constraint
Set reference84 =
part1.CreateReferenceFromObject(point2D46) Set constraint88 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint82 As Constraint reference90)
Set constraint82 =
constraint88.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference84) Dim reference91 As Reference
constraint82.Mode = catCstModeDrivingDimension Set reference91 =
part1.CreateReferenceFromObject(point2D53)
Dim reference85 As Reference
Dim constraint89 As Constraint
Set reference85 =
part1.CreateReferenceFromObject(point2D47) Set constraint89 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint83 As Constraint reference91)
Set constraint83 = constraint89.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference85) Dim reference92 As Reference
constraint83.Mode = catCstModeDrivingDimension Set reference92 =
part1.CreateReferenceFromObject(point2D54)
Dim reference86 As Reference
Dim constraint90 As Constraint
Set reference86 =
part1.CreateReferenceFromObject(point2D48) Set constraint90 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint84 As Constraint reference92)
Set constraint84 = constraint90.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference86) Dim reference93 As Reference
constraint84.Mode = catCstModeDrivingDimension Set reference93 =
part1.CreateReferenceFromObject(point2D55)
Dim reference87 As Reference
Dim constraint91 As Constraint
Set reference87 =
part1.CreateReferenceFromObject(point2D49) Set constraint91 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint85 As Constraint reference93)
Set constraint85 = constraint91.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference87) Dim reference94 As Reference
constraint85.Mode = catCstModeDrivingDimension Set reference94 =
part1.CreateReferenceFromObject(point2D56)
Dim reference88 As Reference
Dim constraint92 As Constraint
Set reference88 =
part1.CreateReferenceFromObject(point2D50) Set constraint92 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint86 As Constraint reference94)
Set constraint86 = constraint92.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference88) Dim reference95 As Reference
constraint86.Mode = catCstModeDrivingDimension Set reference95 =
part1.CreateReferenceFromObject(point2D57)
Dim reference89 As Reference
Dim constraint93 As Constraint
Set reference89 =
part1.CreateReferenceFromObject(point2D51) Set constraint93 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
Dim constraint87 As Constraint reference95)
Set constraint87 = constraint93.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
reference89) Dim reference96 As Reference
constraint87.Mode = catCstModeDrivingDimension Set reference96 =
part1.CreateReferenceFromObject(point2D58)
Dim reference90 As Reference

139
140
ANEXOS

Dim constraint94 As Constraint Set reference102 =


part1.CreateReferenceFromObject(point2D34)
Set constraint94 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint100 As Constraint
reference96)
Set constraint100 =
constraint94.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference102)
Dim reference97 As Reference
constraint100.Mode = catCstModeDrivingDimension
Set reference97 =
part1.CreateReferenceFromObject(point2D59) Dim reference103 As Reference
Dim constraint95 As Constraint Set reference103 =
part1.CreateReferenceFromObject(point2D35)
Set constraint95 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint101 As Constraint
reference97)
Set constraint101 =
constraint95.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference103)
Dim reference98 As Reference
constraint101.Mode = catCstModeDrivingDimension
Set reference98 =
part1.CreateReferenceFromObject(point2D60) Dim reference104 As Reference
Dim constraint96 As Constraint Set reference104 =
part1.CreateReferenceFromObject(point2D36)
Set constraint96 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6, Dim constraint102 As Constraint
reference98)
Set constraint102 =
constraint96.Mode = catCstModeDrivingDimension constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference104)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint102.Mode = catCstModeDrivingDimension
'' Por último acotamos los puntos del Intradós por su
distancia al eje horizontal '' Dim reference105 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference105 =
part1.CreateReferenceFromObject(point2D37)
Dim reference99 As Reference
Dim constraint103 As Constraint
Set reference99 =
part1.CreateReferenceFromObject(point2D31) Set constraint103 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint97 As Constraint reference105)
Set constraint97 = constraint103.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference99) Dim reference106 As Reference
constraint97.Mode = catCstModeDrivingDimension Set reference106 =
part1.CreateReferenceFromObject(point2D38)
Dim reference100 As Reference
Dim constraint104 As Constraint
Set reference100 =
part1.CreateReferenceFromObject(point2D32) Set constraint104 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint98 As Constraint reference106)
Set constraint98 = constraint104.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference100) Dim reference107 As Reference
constraint98.Mode = catCstModeDrivingDimension Set reference107 =
part1.CreateReferenceFromObject(point2D39)
Dim reference101 As Reference
Dim constraint105 As Constraint
Set reference101 =
part1.CreateReferenceFromObject(point2D33) Set constraint105 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint99 As Constraint reference107)
Set constraint99 = constraint105.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference101) Dim reference108 As Reference
constraint99.Mode = catCstModeDrivingDimension Set reference108 =
part1.CreateReferenceFromObject(point2D40)
Dim reference102 As Reference

140
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 141

Dim constraint106 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,


reference114)
Set constraint106 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint112.Mode = catCstModeDrivingDimension
reference108)
Dim reference115 As Reference
constraint106.Mode = catCstModeDrivingDimension
Set reference115 =
Dim reference109 As Reference part1.CreateReferenceFromObject(point2D47)
Set reference109 = Dim constraint113 As Constraint
part1.CreateReferenceFromObject(point2D41)
Set constraint113 =
Dim constraint107 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference115)
Set constraint107 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint113.Mode = catCstModeDrivingDimension
reference109)
Dim reference116 As Reference
constraint107.Mode = catCstModeDrivingDimension
Set reference116 =
Dim reference110 As Reference part1.CreateReferenceFromObject(point2D48)
Set reference110 = Dim constraint114 As Constraint
part1.CreateReferenceFromObject(point2D42)
Set constraint114 =
Dim constraint108 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference116)
Set constraint108 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint114.Mode = catCstModeDrivingDimension
reference110)
Dim reference117 As Reference
constraint108.Mode = catCstModeDrivingDimension
Set reference117 =
Dim reference111 As Reference part1.CreateReferenceFromObject(point2D49)
Set reference111 = Dim constraint115 As Constraint
part1.CreateReferenceFromObject(point2D43)
Set constraint115 =
Dim constraint109 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference117)
Set constraint109 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint115.Mode = catCstModeDrivingDimension
reference111)
Dim reference118 As Reference
constraint109.Mode = catCstModeDrivingDimension
Set reference118 =
Dim reference112 As Reference part1.CreateReferenceFromObject(point2D50)
Set reference112 = Dim constraint116 As Constraint
part1.CreateReferenceFromObject(point2D44)
Set constraint116 =
Dim constraint110 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference118)
Set constraint110 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint116.Mode = catCstModeDrivingDimension
reference112)
Dim reference119 As Reference
constraint110.Mode = catCstModeDrivingDimension
Set reference119 =
Dim reference113 As Reference part1.CreateReferenceFromObject(point2D51)
Set reference113 = Dim constraint117 As Constraint
part1.CreateReferenceFromObject(point2D45)
Set constraint117 =
Dim constraint111 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference119)
Set constraint111 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, constraint117.Mode = catCstModeDrivingDimension
reference113)
Dim reference120 As Reference
constraint111.Mode = catCstModeDrivingDimension
Set reference120 =
Dim reference114 As Reference part1.CreateReferenceFromObject(point2D52)
Set reference114 = Dim constraint118 As Constraint
part1.CreateReferenceFromObject(point2D46)
Set constraint118 =
Dim constraint112 As Constraint constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference120)
Set constraint112 =

141
142
ANEXOS

constraint118.Mode = catCstModeDrivingDimension Set reference127 =


part1.CreateReferenceFromObject(point2D59)
Dim reference121 As Reference
Dim constraint125 As Constraint
Set reference121 =
part1.CreateReferenceFromObject(point2D53) Set constraint125 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint119 As Constraint reference127)
Set constraint119 =
constraint125.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference121) Dim reference128 As Reference
constraint119.Mode = catCstModeDrivingDimension Set reference128 =
part1.CreateReferenceFromObject(point2D60)
Dim reference122 As Reference
Dim constraint126 As Constraint
Set reference122 =
part1.CreateReferenceFromObject(point2D54) Set constraint126 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
Dim constraint120 As Constraint reference128)
Set constraint120 = constraint126.Mode = catCstModeDrivingDimension
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference122) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint120.Mode = catCstModeDrivingDimension '' Acotamos el control point del borde de ataque ''
Dim reference123 As Reference '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set reference123 = Dim reference129 As Reference
part1.CreateReferenceFromObject(point2D55)
Set reference129 =
Dim constraint121 As Constraint part1.CreateReferenceFromObject(point2D61)
Set constraint121 = Dim constraint127 As Constraint
constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference123) Set constraint127 =
constraints1.AddBiEltCst(catCstTypeDistance, reference6,
constraint121.Mode = catCstModeDrivingDimension reference129)
Dim reference124 As Reference constraint127.Mode = catCstModeDrivingDimension
Set reference124 = Dim length127 As Length
part1.CreateReferenceFromObject(point2D56)
Set length127 = constraint127.Dimension
Dim constraint122 As Constraint
length127.Value = 0
Set constraint122 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, Dim reference130 As Reference
reference124) Set reference130 =
constraint122.Mode = catCstModeDrivingDimension part1.CreateReferenceFromObject(point2D61)

Dim reference125 As Reference Dim constraint128 As Constraint

Set reference125 = Set constraint128 =


part1.CreateReferenceFromObject(point2D57) constraints1.AddBiEltCst(catCstTypeDistance, reference8,
reference130)
Dim constraint123 As Constraint
constraint128.Mode = catCstModeDrivingDimension
Set constraint123 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, Dim length128 As Length
reference125) Set length128 = constraint128.Dimension
constraint123.Mode = catCstModeDrivingDimension Dim formula5 As Formula
Dim reference126 As Reference Set formula5 = relations.CreateFormula("Punto borde de
Set reference126 = ataque encastre", "Borde de ataque", length128,
part1.CreateReferenceFromObject(point2D58) "Semienvergadura")

Dim constraint124 As Constraint ' Una vez creado y acotados todos los puntos del perfil,
realizamos un spline alrededor de todos los puntos en un nuevo
Set constraint124 =
constraints1.AddBiEltCst(catCstTypeDistance, reference8, ' sketch. En dicho spline hemos unido todos los puntos
exceptuando los situados en el borde de salida. Ya que si
reference126)
unimos
constraint124.Mode = catCstModeDrivingDimension
' estos dos puntos en el mismo spline este se distorsiona.
Dim reference127 As Reference

142
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 143

Dim arrayOfObject1(60) Set arrayOfObject1(42) = point2D42


Set arrayOfObject1(0) = point2D30 Set arrayOfObject1(43) = point2D43
Set arrayOfObject1(1) = point2D29 Set arrayOfObject1(44) = point2D44
Set arrayOfObject1(2) = point2D28 Set arrayOfObject1(45) = point2D45
Set arrayOfObject1(3) = point2D27 Set arrayOfObject1(46) = point2D46
Set arrayOfObject1(4) = point2D26 Set arrayOfObject1(47) = point2D47
Set arrayOfObject1(5) = point2D25 Set arrayOfObject1(48) = point2D48
Set arrayOfObject1(6) = point2D24 Set arrayOfObject1(49) = point2D49
Set arrayOfObject1(7) = point2D23 Set arrayOfObject1(50) = point2D50
Set arrayOfObject1(8) = point2D22 Set arrayOfObject1(51) = point2D51
Set arrayOfObject1(9) = point2D21 Set arrayOfObject1(52) = point2D52
Set arrayOfObject1(10) = point2D20 Set arrayOfObject1(53) = point2D53
Set arrayOfObject1(11) = point2D19 Set arrayOfObject1(54) = point2D54
Set arrayOfObject1(12) = point2D18 Set arrayOfObject1(55) = point2D55
Set arrayOfObject1(13) = point2D17 Set arrayOfObject1(56) = point2D56
Set arrayOfObject1(14) = point2D16 Set arrayOfObject1(57) = point2D57
Set arrayOfObject1(15) = point2D15 Set arrayOfObject1(58) = point2D58
Set arrayOfObject1(16) = point2D14 Set arrayOfObject1(59) = point2D59
Set arrayOfObject1(17) = point2D13 Set arrayOfObject1(60) = point2D60
Set arrayOfObject1(18) = point2D12 Dim spline2D1 As Spline2D
Set arrayOfObject1(19) = point2D11 Set factory2D1temp = factory2D1
Set arrayOfObject1(20) = point2D10 Set spline2D1 =
factory2D1temp.CreateSpline(arrayOfObject1)
Set arrayOfObject1(21) = point2D9
spline2D1.ReportName = 71
Set arrayOfObject1(22) = point2D8
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set arrayOfObject1(23) = point2D7
' Unimos los dos puntos del borde de salida mediante otro
Set arrayOfObject1(24) = point2D6 spline el cual creará una linea recta entre estos dos puntos '
Set arrayOfObject1(25) = point2D5 ' aunque lo ideal seria unirlo mediante un arco de
Set arrayOfObject1(26) = point2D4 circunferencia el cual aun no sabemos hacer. '

Set arrayOfObject1(27) = point2D3 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set arrayOfObject1(28) = point2D2 Dim arrayOfObject2(1)

Set arrayOfObject1(29) = point2D1 Set arrayOfObject2(0) = point2D30

Set arrayOfObject1(30) = point2D61 Set arrayOfObject2(1) = point2D60

Set arrayOfObject1(31) = point2D31 Dim spline2D2 As Spline2D

Set arrayOfObject1(32) = point2D32 Set factory2D2temp = factory2D1

Set arrayOfObject1(33) = point2D33 Set spline2D2 =


factory2D2temp.CreateSpline(arrayOfObject2)
Set arrayOfObject1(34) = point2D34
spline2D1.ReportName = 72
Set arrayOfObject1(35) = point2D35
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set arrayOfObject1(36) = point2D36
' Cerramos el sketch
Set arrayOfObject1(37) = point2D37
sketch1.CloseEdition
Set arrayOfObject1(38) = point2D38
' Creamos las Regla a través de las cuales tendremos
Set arrayOfObject1(39) = point2D39 parametrizados nuestros perfiles.
Set arrayOfObject1(40) = point2D40 ' Vamos a crear una regla para punto del perfil.
Set arrayOfObject1(41) = point2D41 ' Posteriormente modificamos la Regla e introducimos las
lineas de códigos obtenidas con MATLAB.

143
144
ANEXOS

' Al ser lineas de códigos muy largas, estas no caben en una 0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((1-
sola linea, por lo cual habrá que poner al final de cada linea (NACA2/10))**2)*((NACA2/10)-(40/1000)))))" & vbCrLf &
_
' " & _ para poder continuar debajo y cuando queramos que
cambie de linea & vbCrLf & "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.38\Offset =
Dim rule1 As Rule (Semienvergadura+((NACA1/100)*(40/1000*Cuerda)*(2*(N
Set rule1 = relations.CreateProgram("rule1", "", "") ACA2/10)-
40/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2
' Modificamos la Regla e introducimos todas las lineas de 969*sqrt(40/1000)-0.1260*(40/1000)-
códigos obtenidas con MATLAB 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
' Al ser muchas lineas de códigos estas no caben en una sola 0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
linea, por lo cual habrá que poner al final de cada linea 0)**2)*((NACA2/10)-(40/1000))))) else
PartBody\Sketch.1\Offset.38\Offset =
' " & _ para poder continuar debajo y cuando queramos que (Semienvergadura+((NACA1/100)*(Cuerda-
cambie de linea & vbCrLf & 40/1000*Cuerda)*(-2*(NACA2/10)+40/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule1.Modify "/*Rule created by Francisco Javier Jiménez
40/1000)-0.1260*(40/1000)-
Calvo*/" & vbCrLf & _
0.3516*(40/1000)**2+0.2843*(40/1000)**3-
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(40/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
Dim rule3 As Rule
0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- Set rule3 = relations.CreateProgram("rule3", "", "")
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(20/1000))))) else rule3.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.7\Offset = (20/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)- "if (60/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(20/1000)- PartBody\Sketch.1\Offset.9\Offset = (60/1000*Cuerda -
0.3516*(20/1000)**2+0.2843*(20/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(60/1000)-
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))" & vbCrLf & 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
_ 0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0)**2)*((NACA2/10)-(60/1000))))) else
PartBody\Sketch.1\Offset.37\Offset = PartBody\Sketch.1\Offset.9\Offset = (60/1000*Cuerda -
(Semienvergadura+((NACA1/100)*(20/1000*Cuerda)*(2*(N NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)-
ACA2/10)- 0.1260*(60/1000)-
20/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
969*sqrt(20/1000)-0.1260*(20/1000)- 0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- (NACA2/10))**2)*((NACA2/10)-(60/1000)))))" & vbCrLf &
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1 _
0)**2)*((NACA2/10)-(20/1000))))) else "if (60/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.37\Offset = PartBody\Sketch.1\Offset.39\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(60/1000*Cuerda)*(2*(N
20/1000*Cuerda)*(-2*(NACA2/10)+20/1000+1)/(1- ACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 60/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2
20/1000)-0.1260*(20/1000)- 969*sqrt(60/1000)-0.1260*(60/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
(NACA2/10))**2)*((NACA2/10)-(20/1000)))))" 0)**2)*((NACA2/10)-(60/1000))))) else
Dim rule2 As Rule PartBody\Sketch.1\Offset.39\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule2 = relations.CreateProgram("rule2", "", "") 60/1000*Cuerda)*(-2*(NACA2/10)+60/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule2.Modify "/*Rule created by Francisco Javier Jiménez
60/1000)-0.1260*(60/1000)-
Calvo*/" & vbCrLf & _
0.3516*(60/1000)**2+0.2843*(60/1000)**3-
"if (40/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.8\Offset = (40/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(60/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
Dim rule4 As Rule
0.1260*(40/1000)-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- Set rule4 = relations.CreateProgram("rule4", "", "")
0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(40/1000))))) else rule4.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.8\Offset = (40/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)- "if (80/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(40/1000)- PartBody\Sketch.1\Offset.10\Offset = (80/1000*Cuerda -
0.3516*(40/1000)**2+0.2843*(40/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)-

144
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 145

0.1260*(80/1000)- Set rule6 = relations.CreateProgram("rule6", "", "")


0.3516*(80/1000)**2+0.2843*(80/1000)**3-
rule6.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(80/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.10\Offset = (80/1000*Cuerda - "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- PartBody\Sketch.1\Offset.12\Offset = (136/1000*Cuerda -
0.1260*(80/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- 0.1260*(136/1000)-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" & vbCrLf & 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
_ 10)**2)*((NACA2/10)-(136/1000))))) else
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.12\Offset = (136/1000*Cuerda -
PartBody\Sketch.1\Offset.40\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
(Semienvergadura+((NACA1/100)*(80/1000*Cuerda)*(2*(N 0.1260*(136/1000)-
ACA2/10)- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
80/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((1-
969*sqrt(80/1000)-0.1260*(80/1000)- (NACA2/10))**2)*((NACA2/10)-(136/1000)))))" & vbCrLf
0.3516*(80/1000)**2+0.2843*(80/1000)**3- &_
0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1 "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
0)**2)*((NACA2/10)-(80/1000))))) else PartBody\Sketch.1\Offset.42\Offset =
PartBody\Sketch.1\Offset.40\Offset = (Semienvergadura+((NACA1/100)*(136/1000*Cuerda)*(2*(
(Semienvergadura+((NACA1/100)*(Cuerda- NACA2/10)-
80/1000*Cuerda)*(-2*(NACA2/10)+80/1000+1)/(1- 136/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 2969*sqrt(136/1000)-0.1260*(136/1000)-
80/1000)-0.1260*(80/1000)- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- 0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(136/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" PartBody\Sketch.1\Offset.42\Offset =
Dim rule5 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
136/1000*Cuerda)*(-2*(NACA2/10)+136/1000+1)/(1-
Set rule5 = relations.CreateProgram("rule5", "", "") NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
136/1000)-0.1260*(136/1000)-
rule5.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (100/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(136/1000)))))"
PartBody\Sketch.1\Offset.11\Offset = (100/1000*Cuerda - Dim rule7 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
0.1260*(100/1000)- Set rule7 = relations.CreateProgram("rule7", "", "")
0.3516*(100/1000)**2+0.2843*(100/1000)**3-
0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule7.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(100/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.11\Offset = (100/1000*Cuerda - "if (172/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)- PartBody\Sketch.1\Offset.13\Offset = (172/1000*Cuerda -
0.1260*(100/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.1260*(172/1000)-
0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(100/1000)))))" & vbCrLf 0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
&_ 10)**2)*((NACA2/10)-(172/1000))))) else
"if (100/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.13\Offset = (172/1000*Cuerda -
PartBody\Sketch.1\Offset.41\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)-
(Semienvergadura+((NACA1/100)*(100/1000*Cuerda)*(2*( 0.1260*(172/1000)-
NACA2/10)- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
100/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(100/1000)-0.1260*(100/1000)- (NACA2/10))**2)*((NACA2/10)-(172/1000)))))" & vbCrLf
0.3516*(100/1000)**2+0.2843*(100/1000)**3- &_
0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (172/1000*Cuerda) <= (Cuerda*(NACA2/10))
10)**2)*((NACA2/10)-(100/1000))))) else PartBody\Sketch.1\Offset.43\Offset =
PartBody\Sketch.1\Offset.41\Offset = (Semienvergadura+((NACA1/100)*(172/1000*Cuerda)*(2*(
(Semienvergadura+((NACA1/100)*(Cuerda- NACA2/10)-
100/1000*Cuerda)*(-2*(NACA2/10)+100/1000+1)/(1- 172/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 2969*sqrt(172/1000)-0.1260*(172/1000)-
100/1000)-0.1260*(100/1000)- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(172/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(100/1000)))))" PartBody\Sketch.1\Offset.43\Offset =
Dim rule6 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
172/1000*Cuerda)*(-2*(NACA2/10)+172/1000+1)/(1-

145
146
ANEXOS

NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 244/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
172/1000)-0.1260*(172/1000)- 2969*sqrt(244/1000)-0.1260*(244/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" 10)**2)*((NACA2/10)-(244/1000))))) else
PartBody\Sketch.1\Offset.45\Offset =
Dim rule8 As Rule
(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule8 = relations.CreateProgram("rule8", "", "") 244/1000*Cuerda)*(-2*(NACA2/10)+244/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule8.Modify "/*Rule created by Francisco Javier Jiménez 244/1000)-0.1260*(244/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.14\Offset = (208/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(244/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)- Dim rule10 As Rule
0.1260*(208/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- Set rule10 = relations.CreateProgram("rule10", "", "")
0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule10.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(208/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.14\Offset = (208/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)- "if (280/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(208/1000)- PartBody\Sketch.1\Offset.16\Offset = (280/1000*Cuerda -
0.3516*(208/1000)**2+0.2843*(208/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(280/1000)-
(NACA2/10))**2)*((NACA2/10)-(208/1000)))))" & vbCrLf 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
&_ 0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(280/1000))))) else
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.16\Offset = (280/1000*Cuerda -
PartBody\Sketch.1\Offset.44\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)-
(Semienvergadura+((NACA1/100)*(208/1000*Cuerda)*(2*( 0.1260*(280/1000)-
NACA2/10)- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
208/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(208/1000)-0.1260*(208/1000)- (NACA2/10))**2)*((NACA2/10)-(280/1000)))))" & vbCrLf
0.3516*(208/1000)**2+0.2843*(208/1000)**3- &_
0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(208/1000))))) else "if (280/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.44\Offset = PartBody\Sketch.1\Offset.46\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(280/1000*Cuerda)*(2*(
208/1000*Cuerda)*(-2*(NACA2/10)+208/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 280/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
208/1000)-0.1260*(208/1000)- 2969*sqrt(280/1000)-0.1260*(280/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(208/1000)))))" 10)**2)*((NACA2/10)-(280/1000))))) else
PartBody\Sketch.1\Offset.46\Offset =
Dim rule9 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
Set rule9 = relations.CreateProgram("rule9", "", "") 280/1000*Cuerda)*(-2*(NACA2/10)+280/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule9.Modify "/*Rule created by Francisco Javier Jiménez 280/1000)-0.1260*(280/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
"if (244/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.15\Offset = (244/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(280/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)- Dim rule11 As Rule
0.1260*(244/1000)-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- Set rule11 = relations.CreateProgram("rule11", "", "")
0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule11.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(244/1000))))) else
Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.15\Offset = (244/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)- "if (316/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(244/1000)- PartBody\Sketch.1\Offset.17\Offset = (316/1000*Cuerda -
0.3516*(244/1000)**2+0.2843*(244/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(316/1000)-
(NACA2/10))**2)*((NACA2/10)-(244/1000)))))" & vbCrLf 0.3516*(316/1000)**2+0.2843*(316/1000)**3-
&_ 0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(316/1000))))) else
"if (244/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.17\Offset = (316/1000*Cuerda -
PartBody\Sketch.1\Offset.45\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
(Semienvergadura+((NACA1/100)*(244/1000*Cuerda)*(2*( 0.1260*(316/1000)-
NACA2/10)-

146
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 147

0.3516*(316/1000)**2+0.2843*(316/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(388/1000)-
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" & vbCrLf 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
&_ 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(388/1000))))) else
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.19\Offset = (388/1000*Cuerda -
PartBody\Sketch.1\Offset.47\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
(Semienvergadura+((NACA1/100)*(316/1000*Cuerda)*(2*( 0.1260*(388/1000)-
NACA2/10)- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
316/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(316/1000)-0.1260*(316/1000)-
(NACA2/10))**2)*((NACA2/10)-(388/1000)))))" & vbCrLf
0.3516*(316/1000)**2+0.2843*(316/1000)**3- &_
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(316/1000))))) else "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.47\Offset = PartBody\Sketch.1\Offset.49\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(388/1000*Cuerda)*(2*(
316/1000*Cuerda)*(-2*(NACA2/10)+316/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 388/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
316/1000)-0.1260*(316/1000)- 2969*sqrt(388/1000)-0.1260*(388/1000)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" 10)**2)*((NACA2/10)-(388/1000))))) else
PartBody\Sketch.1\Offset.49\Offset =
Dim rule12 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
Set rule12 = relations.CreateProgram("rule12", "", "") 388/1000*Cuerda)*(-2*(NACA2/10)+388/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule12.Modify "/*Rule created by Francisco Javier Jiménez 388/1000)-0.1260*(388/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
"if (352/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.18\Offset = (352/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(388/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)- Dim rule14 As Rule
0.1260*(352/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- Set rule14 = relations.CreateProgram("rule14", "", "")
0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule14.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(352/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.18\Offset = (352/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)- "if (424/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(352/1000)- PartBody\Sketch.1\Offset.20\Offset = (424/1000*Cuerda -
0.3516*(352/1000)**2+0.2843*(352/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)-
0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(424/1000)-
(NACA2/10))**2)*((NACA2/10)-(352/1000)))))" & vbCrLf 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
&_ 0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(424/1000))))) else
"if (352/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.20\Offset = (424/1000*Cuerda -
PartBody\Sketch.1\Offset.48\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)-
(Semienvergadura+((NACA1/100)*(352/1000*Cuerda)*(2*( 0.1260*(424/1000)-
NACA2/10)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3-
352/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(352/1000)-0.1260*(352/1000)- (NACA2/10))**2)*((NACA2/10)-(424/1000)))))" & vbCrLf
0.3516*(352/1000)**2+0.2843*(352/1000)**3- &_
0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(352/1000))))) else "if (424/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.48\Offset = PartBody\Sketch.1\Offset.50\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(424/1000*Cuerda)*(2*(
352/1000*Cuerda)*(-2*(NACA2/10)+352/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 424/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
352/1000)-0.1260*(352/1000)- 2969*sqrt(424/1000)-0.1260*(424/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(352/1000)))))" 10)**2)*((NACA2/10)-(424/1000))))) else
PartBody\Sketch.1\Offset.50\Offset =
Dim rule13 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
Set rule13 = relations.CreateProgram("rule13", "", "") 424/1000*Cuerda)*(-2*(NACA2/10)+424/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule13.Modify "/*Rule created by Francisco Javier Jiménez 424/1000)-0.1260*(424/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
"if (388/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.19\Offset = (388/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(424/1000)))))"

147
148
ANEXOS

Dim rule15 As Rule PartBody\Sketch.1\Offset.52\Offset =


(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule15 = relations.CreateProgram("rule15", "", "")
496/1000*Cuerda)*(-2*(NACA2/10)+496/1000+1)/(1-
rule15.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 496/1000)-0.1260*(496/1000)-
0.3516*(496/1000)**2+0.2843*(496/1000)**3-
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.21\Offset = (460/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(496/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
0.1260*(460/1000)- Dim rule17 As Rule
0.3516*(460/1000)**2+0.2843*(460/1000)**3- Set rule17 = relations.CreateProgram("rule17", "", "")
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(460/1000))))) else rule17.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.21\Offset = (460/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
0.1260*(460/1000)- "if (532/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.23\Offset = (532/1000*Cuerda -
0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)-
(NACA2/10))**2)*((NACA2/10)-(460/1000)))))" & vbCrLf 0.1260*(532/1000)-
&_ 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(532/1000))))) else
PartBody\Sketch.1\Offset.51\Offset = PartBody\Sketch.1\Offset.23\Offset = (532/1000*Cuerda -
(Semienvergadura+((NACA1/100)*(460/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)-
NACA2/10)- 0.1260*(532/1000)-
460/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
2969*sqrt(460/1000)-0.1260*(460/1000)- 0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- (NACA2/10))**2)*((NACA2/10)-(532/1000)))))" & vbCrLf
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(460/1000))))) else
PartBody\Sketch.1\Offset.51\Offset = "if (532/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Semienvergadura+((NACA1/100)*(Cuerda- PartBody\Sketch.1\Offset.53\Offset =
460/1000*Cuerda)*(-2*(NACA2/10)+460/1000+1)/(1- (Semienvergadura+((NACA1/100)*(532/1000*Cuerda)*(2*(
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( NACA2/10)-
460/1000)-0.1260*(460/1000)- 532/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
0.3516*(460/1000)**2+0.2843*(460/1000)**3- 2969*sqrt(532/1000)-0.1260*(532/1000)-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(460/1000)))))" 0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(532/1000))))) else
Dim rule16 As Rule PartBody\Sketch.1\Offset.53\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule16 = relations.CreateProgram("rule16", "", "") 532/1000*Cuerda)*(-2*(NACA2/10)+532/1000+1)/(1-
rule16.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 532/1000)-0.1260*(532/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3-
"if (496/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.22\Offset = (496/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(532/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(496/1000)- Dim rule18 As Rule
0.3516*(496/1000)**2+0.2843*(496/1000)**3- Set rule18 = relations.CreateProgram("rule18", "", "")
0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(496/1000))))) else rule18.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.22\Offset = (496/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(496/1000)- "if (568/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(496/1000)**2+0.2843*(496/1000)**3- PartBody\Sketch.1\Offset.24\Offset = (568/1000*Cuerda -
0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
0.1260*(568/1000)-
(NACA2/10))**2)*((NACA2/10)-(496/1000)))))" & vbCrLf
&_ 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (496/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(568/1000))))) else
PartBody\Sketch.1\Offset.52\Offset = PartBody\Sketch.1\Offset.24\Offset = (568/1000*Cuerda -
(Semienvergadura+((NACA1/100)*(496/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
NACA2/10)- 0.1260*(568/1000)-
496/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
2969*sqrt(496/1000)-0.1260*(496/1000)- 0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(496/1000)**2+0.2843*(496/1000)**3- (NACA2/10))**2)*((NACA2/10)-(568/1000)))))" & vbCrLf
0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(496/1000))))) else
"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10))

148
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 149

PartBody\Sketch.1\Offset.54\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
(Semienvergadura+((NACA1/100)*(568/1000*Cuerda)*(2*( 0.1260*(640/1000)-
NACA2/10)- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
568/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(568/1000)-0.1260*(568/1000)- (NACA2/10))**2)*((NACA2/10)-(640/1000)))))" & vbCrLf
0.3516*(568/1000)**2+0.2843*(568/1000)**3- &_
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(568/1000))))) else "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.54\Offset = PartBody\Sketch.1\Offset.56\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(640/1000*Cuerda)*(2*(
NACA2/10)-
568/1000*Cuerda)*(-2*(NACA2/10)+568/1000+1)/(1-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 640/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
568/1000)-0.1260*(568/1000)- 2969*sqrt(640/1000)-0.1260*(640/1000)-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(568/1000)))))" 10)**2)*((NACA2/10)-(640/1000))))) else
PartBody\Sketch.1\Offset.56\Offset =
Dim rule19 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
640/1000*Cuerda)*(-2*(NACA2/10)+640/1000+1)/(1-
Set rule19 = relations.CreateProgram("rule19", "", "") NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule19.Modify "/*Rule created by Francisco Javier Jiménez 640/1000)-0.1260*(640/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (604/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(640/1000)))))"
PartBody\Sketch.1\Offset.25\Offset = (604/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)- Dim rule21 As Rule
0.1260*(604/1000)- Set rule21 = relations.CreateProgram("rule21", "", "")
0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule21.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(604/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.25\Offset = (604/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)- "if (676/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(604/1000)- PartBody\Sketch.1\Offset.27\Offset = (676/1000*Cuerda -
0.3516*(604/1000)**2+0.2843*(604/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(676/1000)-
(NACA2/10))**2)*((NACA2/10)-(604/1000)))))" & vbCrLf 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
&_ 0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(676/1000))))) else
"if (604/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.27\Offset = (676/1000*Cuerda -
PartBody\Sketch.1\Offset.55\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
(Semienvergadura+((NACA1/100)*(604/1000*Cuerda)*(2*( 0.1260*(676/1000)-
NACA2/10)- 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
604/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((1-
2969*sqrt(604/1000)-0.1260*(604/1000)- (NACA2/10))**2)*((NACA2/10)-(676/1000)))))" & vbCrLf
0.3516*(604/1000)**2+0.2843*(604/1000)**3- &_
0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(604/1000))))) else "if (676/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.57\Offset =
PartBody\Sketch.1\Offset.55\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(676/1000*Cuerda)*(2*(
604/1000*Cuerda)*(-2*(NACA2/10)+604/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 676/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
2969*sqrt(676/1000)-0.1260*(676/1000)-
604/1000)-0.1260*(604/1000)-
0.3516*(604/1000)**2+0.2843*(604/1000)**3- 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(604/1000)))))" 10)**2)*((NACA2/10)-(676/1000))))) else
PartBody\Sketch.1\Offset.57\Offset =
Dim rule20 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
676/1000*Cuerda)*(-2*(NACA2/10)+676/1000+1)/(1-
Set rule20 = relations.CreateProgram("rule20", "", "") NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
rule20.Modify "/*Rule created by Francisco Javier Jiménez 676/1000)-0.1260*(676/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (640/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(676/1000)))))"
PartBody\Sketch.1\Offset.26\Offset = (640/1000*Cuerda -
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)- Dim rule22 As Rule
0.1260*(640/1000)- Set rule22 = relations.CreateProgram("rule22", "", "")
0.3516*(640/1000)**2+0.2843*(640/1000)**3-
0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule22.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(640/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.26\Offset = (640/1000*Cuerda -

149
150
ANEXOS

"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((1-


PartBody\Sketch.1\Offset.28\Offset = (712/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(748/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(712/1000)- Dim rule24 As Rule
0.3516*(712/1000)**2+0.2843*(712/1000)**3- Set rule24 = relations.CreateProgram("rule24", "", "")
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(712/1000))))) else rule24.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.28\Offset = (712/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)- "if (784/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(712/1000)- PartBody\Sketch.1\Offset.30\Offset = (784/1000*Cuerda -
0.3516*(712/1000)**2+0.2843*(712/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(784/1000)-
(NACA2/10))**2)*((NACA2/10)-(712/1000)))))" & vbCrLf 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
&_ 0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(784/1000))))) else
PartBody\Sketch.1\Offset.58\Offset = PartBody\Sketch.1\Offset.30\Offset = (784/1000*Cuerda -
(Semienvergadura+((NACA1/100)*(712/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)-
NACA2/10)- 0.1260*(784/1000)-
712/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
2969*sqrt(712/1000)-0.1260*(712/1000)- 0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- (NACA2/10))**2)*((NACA2/10)-(784/1000)))))" & vbCrLf
0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(712/1000))))) else "if (784/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.58\Offset = PartBody\Sketch.1\Offset.60\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(784/1000*Cuerda)*(2*(
712/1000*Cuerda)*(-2*(NACA2/10)+712/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 784/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
712/1000)-0.1260*(712/1000)- 2969*sqrt(784/1000)-0.1260*(784/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(712/1000)))))" 10)**2)*((NACA2/10)-(784/1000))))) else
Dim rule23 As Rule PartBody\Sketch.1\Offset.60\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule23 = relations.CreateProgram("rule23", "", "") 784/1000*Cuerda)*(-2*(NACA2/10)+784/1000+1)/(1-
rule23.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
Calvo*/" & vbCrLf & _ 784/1000)-0.1260*(784/1000)-
0.3516*(784/1000)**2+0.2843*(784/1000)**3-
"if (748/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.29\Offset = (748/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(784/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.1260*(748/1000)- Dim rule25 As Rule
0.3516*(748/1000)**2+0.2843*(748/1000)**3- Set rule25 = relations.CreateProgram("rule25", "", "")
0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(748/1000))))) else rule25.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.29\Offset = (748/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)- "if (820/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(748/1000)- PartBody\Sketch.1\Offset.31\Offset = (820/1000*Cuerda -
0.3516*(748/1000)**2+0.2843*(748/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(820/1000)-
(NACA2/10))**2)*((NACA2/10)-(748/1000)))))" & vbCrLf 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
&_ 0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (748/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(820/1000))))) else
PartBody\Sketch.1\Offset.59\Offset = PartBody\Sketch.1\Offset.31\Offset = (820/1000*Cuerda -
(Semienvergadura+((NACA1/100)*(748/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
NACA2/10)- 0.1260*(820/1000)-
748/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
2969*sqrt(748/1000)-0.1260*(748/1000)- 0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- (NACA2/10))**2)*((NACA2/10)-(820/1000)))))" & vbCrLf
0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(748/1000))))) else "if (820/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.59\Offset = PartBody\Sketch.1\Offset.61\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- (Semienvergadura+((NACA1/100)*(820/1000*Cuerda)*(2*(
748/1000*Cuerda)*(-2*(NACA2/10)+748/1000+1)/(1- NACA2/10)-
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 820/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
748/1000)-0.1260*(748/1000)- 2969*sqrt(820/1000)-0.1260*(820/1000)-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- 0.3516*(820/1000)**2+0.2843*(820/1000)**3-

150
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 151

0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))


10)**2)*((NACA2/10)-(820/1000))))) else PartBody\Sketch.1\Offset.63\Offset =
PartBody\Sketch.1\Offset.61\Offset = (Semienvergadura+((NACA1/100)*(892/1000*Cuerda)*(2*(
(Semienvergadura+((NACA1/100)*(Cuerda- NACA2/10)-
820/1000*Cuerda)*(-2*(NACA2/10)+820/1000+1)/(1- 892/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 2969*sqrt(892/1000)-0.1260*(892/1000)-
820/1000)-0.1260*(820/1000)- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(892/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(820/1000)))))" PartBody\Sketch.1\Offset.63\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Dim rule26 As Rule 892/1000*Cuerda)*(-2*(NACA2/10)+892/1000+1)/(1-
Set rule26 = relations.CreateProgram("rule26", "", "") NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
892/1000)-0.1260*(892/1000)-
rule26.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (856/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(892/1000)))))"
PartBody\Sketch.1\Offset.32\Offset = (856/1000*Cuerda - Dim rule28 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
0.1260*(856/1000)- Set rule28 = relations.CreateProgram("rule28", "", "")
0.3516*(856/1000)**2+0.2843*(856/1000)**3- rule28.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Calvo*/" & vbCrLf & _
10)**2)*((NACA2/10)-(856/1000))))) else
PartBody\Sketch.1\Offset.32\Offset = (856/1000*Cuerda - "if (928/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)- PartBody\Sketch.1\Offset.34\Offset = (928/1000*Cuerda -
0.1260*(856/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 0.1260*(928/1000)-
0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(856/1000)))))" & vbCrLf 0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
&_ 10)**2)*((NACA2/10)-(928/1000))))) else
PartBody\Sketch.1\Offset.34\Offset = (928/1000*Cuerda -
"if (856/1000*Cuerda) <= (Cuerda*(NACA2/10)) NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)-
PartBody\Sketch.1\Offset.62\Offset = 0.1260*(928/1000)-
(Semienvergadura+((NACA1/100)*(856/1000*Cuerda)*(2*( 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
NACA2/10)- 0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((1-
856/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. (NACA2/10))**2)*((NACA2/10)-(928/1000)))))" & vbCrLf
2969*sqrt(856/1000)-0.1260*(856/1000)- &_
0.3516*(856/1000)**2+0.2843*(856/1000)**3-
0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ "if (928/1000*Cuerda) <= (Cuerda*(NACA2/10))
10)**2)*((NACA2/10)-(856/1000))))) else PartBody\Sketch.1\Offset.64\Offset =
PartBody\Sketch.1\Offset.62\Offset = (Semienvergadura+((NACA1/100)*(928/1000*Cuerda)*(2*(
(Semienvergadura+((NACA1/100)*(Cuerda- NACA2/10)-
856/1000*Cuerda)*(-2*(NACA2/10)+856/1000+1)/(1- 928/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( 2969*sqrt(928/1000)-0.1260*(928/1000)-
856/1000)-0.1260*(856/1000)- 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((1- 10)**2)*((NACA2/10)-(928/1000))))) else
(NACA2/10))**2)*((NACA2/10)-(856/1000)))))" PartBody\Sketch.1\Offset.64\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Dim rule27 As Rule 928/1000*Cuerda)*(-2*(NACA2/10)+928/1000+1)/(1-
Set rule27 = relations.CreateProgram("rule27", "", "") NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(
928/1000)-0.1260*(928/1000)-
rule27.Modify "/*Rule created by Francisco Javier Jiménez 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
Calvo*/" & vbCrLf & _ 0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (892/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(928/1000)))))"
PartBody\Sketch.1\Offset.33\Offset = (892/1000*Cuerda - Dim rule29 As Rule
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
0.1260*(892/1000)- Set rule29 = relations.CreateProgram("rule29", "", "")
0.3516*(892/1000)**2+0.2843*(892/1000)**3- rule29.Modify "/*Rule created by Francisco Javier Jiménez
0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
Calvo*/" & vbCrLf & _
10)**2)*((NACA2/10)-(892/1000))))) else
PartBody\Sketch.1\Offset.33\Offset = (892/1000*Cuerda - "if (964/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)- PartBody\Sketch.1\Offset.35\Offset = (964/1000*Cuerda -
0.1260*(892/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3- 0.1260*(964/1000)-
0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(892/1000)))))" & vbCrLf 0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
&_ 10)**2)*((NACA2/10)-(964/1000))))) else

151
152
ANEXOS

PartBody\Sketch.1\Offset.35\Offset = (964/1000*Cuerda - Calvo*/" & vbCrLf & _


NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
"if (20/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(964/1000)-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +
0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
(NACA2/10))**2)*((NACA2/10)-(964/1000)))))" & vbCrLf 0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
&_
0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0)**2)*((NACA2/10)-(20/1000))))) else
PartBody\Sketch.1\Offset.65\Offset = PartBody\Sketch.1\Offset.67\Offset = (20/1000*Cuerda +
(Semienvergadura+((NACA1/100)*(964/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
NACA2/10)- 0.1260*(20/1000)-
964/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0. 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
2969*sqrt(964/1000)-0.1260*(964/1000)- 0.1015*(20/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- (NACA2/10))**2)*((NACA2/10)-(20/1000)))))" & vbCrLf &
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ _
10)**2)*((NACA2/10)-(964/1000))))) else
PartBody\Sketch.1\Offset.65\Offset = "if (20/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Semienvergadura+((NACA1/100)*(Cuerda- PartBody\Sketch.1\Offset.97\Offset =
964/1000*Cuerda)*(-2*(NACA2/10)+964/1000+1)/(1- (Semienvergadura+((NACA1/100)*(20/1000*Cuerda)*(2*(N
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( ACA2/10)-20/1000)/(NACA2/10)**2)-
964/1000)-0.1260*(964/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1260*(20/1000)-
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(964/1000)))))" 0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(20/1000))))) else
Dim rule30 As Rule PartBody\Sketch.1\Offset.97\Offset = (Semienvergadura
+((NACA1/100)*(Cuerda-20/1000*Cuerda)*(-
Set rule30 = relations.CreateProgram("rule30", "", "") 2*(NACA2/10)+20/1000+1)/(1-NACA2/10)**2)-
rule30.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(20/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
"if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(20/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.36\Offset = (1000/1000*Cuerda - (NACA2/10))**2)*((NACA2/10)-(20/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(1000/1000)- Dim rule32 As Rule
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- Set rule32 = relations.CreateProgram("rule32", "", "")
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2
/10)**2)*((NACA2/10)-(1000/1000))))) else rule32.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.36\Offset = (1000/1000*Cuerda - Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(1000/1000)- "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- PartBody\Sketch.1\Offset.68\Offset = (40/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" & vbCrLf 0.1260*(40/1000)-
&_ 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1
"if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0)**2)*((NACA2/10)-(40/1000))))) else
PartBody\Sketch.1\Offset.66\Offset = PartBody\Sketch.1\Offset.68\Offset = (40/1000*Cuerda +
(Semienvergadura+((NACA1/100)*(1000/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
NACA2/10)- 0.1260*(40/1000)-
1000/1000)/(NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*( 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.2969*sqrt(1000/1000)-0.1260*(1000/1000)- 0.1015*(40/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- (NACA2/10))**2)*((NACA2/10)-(40/1000)))))" & vbCrLf &
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((NACA _
2/10)**2)*((NACA2/10)-(1000/1000))))) else
PartBody\Sketch.1\Offset.66\Offset = "if (40/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Semienvergadura+((NACA1/100)*(Cuerda- PartBody\Sketch.1\Offset.98\Offset =
1000/1000*Cuerda)*(-2*(NACA2/10)+1000/1000+1)/(1- (Semienvergadura+((NACA1/100)*(40/1000*Cuerda)*(2*(N
NACA2/10)**2)+NACA34/(100*0.2)*Cuerda*(0.2969*sqrt( ACA2/10)-40/1000)/(NACA2/10)**2)-
1000/1000)-0.1260*(1000/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- 0.1260*(40/1000)-
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" 0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(40/1000))))) else
Dim rule31 As Rule PartBody\Sketch.1\Offset.98\Offset = (Semienvergadura
+((NACA1/100)*(Cuerda-40/1000*Cuerda)*(-
Set rule31 = relations.CreateProgram("rule31", "", "") 2*(NACA2/10)+40/1000+1)/(1-NACA2/10)**2)-
rule31.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(40/1000)-
0.1260*(40/1000)-

152
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 153

0.3516*(40/1000)**2+0.2843*(40/1000)**3- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
(NACA2/10))**2)*((NACA2/10)-(40/1000)))))" 0)**2)*((NACA2/10)-(80/1000))))) else
PartBody\Sketch.1\Offset.100\Offset = (Semienvergadura
Dim rule33 As Rule +((NACA1/100)*(Cuerda-80/1000*Cuerda)*(-
Set rule33 = relations.CreateProgram("rule33", "", "") 2*(NACA2/10)+80/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)-
rule33.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(80/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
"if (60/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(80/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.69\Offset = (60/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(80/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- Dim rule35 As Rule
0.1260*(60/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- Set rule35 = relations.CreateProgram("rule35", "", "")
0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule35.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(60/1000))))) else
Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.69\Offset = (60/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- "if (100/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(60/1000)- PartBody\Sketch.1\Offset.71\Offset = (100/1000*Cuerda +
0.3516*(60/1000)**2+0.2843*(60/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(100/1000)-
(NACA2/10))**2)*((NACA2/10)-(60/1000)))))" & vbCrLf & 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
_ 0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(100/1000))))) else
"if (60/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.71\Offset = (100/1000*Cuerda +
PartBody\Sketch.1\Offset.99\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
(Semienvergadura+((NACA1/100)*(60/1000*Cuerda)*(2*(N 0.1260*(100/1000)-
ACA2/10)-60/1000)/(NACA2/10)**2)- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- 0.1015*(100/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(60/1000)- (NACA2/10))**2)*((NACA2/10)-(100/1000)))))" & vbCrLf
0.3516*(60/1000)**2+0.2843*(60/1000)**3- &_
0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/1
0)**2)*((NACA2/10)-(60/1000))))) else "if (100/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.99\Offset = (Semienvergadura PartBody\Sketch.1\Offset.101\Offset =
+((NACA1/100)*(Cuerda-60/1000*Cuerda)*(- (Semienvergadura+((NACA1/100)*(100/1000*Cuerda)*(2*(
2*(NACA2/10)+60/1000+1)/(1-NACA2/10)**2)- NACA2/10)-100/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(60/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
0.1260*(60/1000)- 0.1260*(100/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
0.1015*(60/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(60/1000)))))" 10)**2)*((NACA2/10)-(100/1000))))) else
PartBody\Sketch.1\Offset.101\Offset = (Semienvergadura
Dim rule34 As Rule
+((NACA1/100)*(Cuerda-100/1000*Cuerda)*(-
Set rule34 = relations.CreateProgram("rule34", "", "") 2*(NACA2/10)+100/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(100/1000)-
rule34.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(100/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(100/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.70\Offset = (80/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(100/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- Dim rule36 As Rule
0.1260*(80/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- Set rule36 = relations.CreateProgram("rule36", "", "")
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/1 rule36.Modify "/*Rule created by Francisco Javier Jiménez
0)**2)*((NACA2/10)-(80/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.70\Offset = (80/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- "if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(80/1000)- PartBody\Sketch.1\Offset.72\Offset = (136/1000*Cuerda +
0.3516*(80/1000)**2+0.2843*(80/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(136/1000)-
(NACA2/10))**2)*((NACA2/10)-(80/1000)))))" & vbCrLf & 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
_ 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(136/1000))))) else
"if (80/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.72\Offset = (136/1000*Cuerda +
PartBody\Sketch.1\Offset.100\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
(Semienvergadura+((NACA1/100)*(80/1000*Cuerda)*(2*(N 0.1260*(136/1000)-
ACA2/10)-80/1000)/(NACA2/10)**2)- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(80/1000)- 0.1015*(136/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(80/1000)- (NACA2/10))**2)*((NACA2/10)-(136/1000)))))" & vbCrLf

153
154
ANEXOS

&_ 0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(208/1000))))) else
"if (136/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.74\Offset = (208/1000*Cuerda +
PartBody\Sketch.1\Offset.102\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
(Semienvergadura+((NACA1/100)*(136/1000*Cuerda)*(2*( 0.1260*(208/1000)-
NACA2/10)-136/1000)/(NACA2/10)**2)- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)-
0.1015*(208/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(136/1000)- (NACA2/10))**2)*((NACA2/10)-(208/1000)))))" & vbCrLf
0.3516*(136/1000)**2+0.2843*(136/1000)**3- &_
0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(136/1000))))) else "if (208/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.102\Offset = (Semienvergadura PartBody\Sketch.1\Offset.104\Offset =
+((NACA1/100)*(Cuerda-136/1000*Cuerda)*(- (Semienvergadura+((NACA1/100)*(208/1000*Cuerda)*(2*(
2*(NACA2/10)+136/1000+1)/(1-NACA2/10)**2)- NACA2/10)-208/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(136/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
0.1260*(136/1000)- 0.1260*(208/1000)-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
0.1015*(136/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(136/1000)))))" 10)**2)*((NACA2/10)-(208/1000))))) else
PartBody\Sketch.1\Offset.104\Offset = (Semienvergadura
Dim rule37 As Rule +((NACA1/100)*(Cuerda-208/1000*Cuerda)*(-
Set rule37 = relations.CreateProgram("rule37", "", "") 2*(NACA2/10)+208/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)-
rule37.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(208/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
"if (172/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(208/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.73\Offset = (172/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(208/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- Dim rule39 As Rule
0.1260*(172/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- Set rule39 = relations.CreateProgram("rule39", "", "")
0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule39.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(172/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.73\Offset = (172/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- "if (244/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(172/1000)- PartBody\Sketch.1\Offset.75\Offset = (244/1000*Cuerda +
0.3516*(172/1000)**2+0.2843*(172/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
0.1015*(172/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(244/1000)-
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" & vbCrLf 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
&_ 0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(244/1000))))) else
"if (172/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.75\Offset = (244/1000*Cuerda +
PartBody\Sketch.1\Offset.103\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
(Semienvergadura+((NACA1/100)*(172/1000*Cuerda)*(2*(
0.1260*(244/1000)-
NACA2/10)-172/1000)/(NACA2/10)**2)- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- 0.1015*(244/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(172/1000)- (NACA2/10))**2)*((NACA2/10)-(244/1000)))))" & vbCrLf
0.3516*(172/1000)**2+0.2843*(172/1000)**3-
&_
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(172/1000))))) else "if (244/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.103\Offset = (Semienvergadura PartBody\Sketch.1\Offset.105\Offset =
+((NACA1/100)*(Cuerda-172/1000*Cuerda)*(- (Semienvergadura+((NACA1/100)*(244/1000*Cuerda)*(2*(
2*(NACA2/10)+172/1000+1)/(1-NACA2/10)**2)- NACA2/10)-244/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(172/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
0.1260*(172/1000)- 0.1260*(244/1000)-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(172/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(172/1000)))))" 10)**2)*((NACA2/10)-(244/1000))))) else
PartBody\Sketch.1\Offset.105\Offset = (Semienvergadura
Dim rule38 As Rule +((NACA1/100)*(Cuerda-244/1000*Cuerda)*(-
Set rule38 = relations.CreateProgram("rule38", "", "") 2*(NACA2/10)+244/1000+1)/(1-NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(244/1000)-
rule38.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(244/1000)-
Calvo*/" & vbCrLf & _ 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
"if (208/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(244/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.74\Offset = (208/1000*Cuerda + (NACA2/10))**2)*((NACA2/10)-(244/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(208/1000)- Dim rule40 As Rule
0.1260*(208/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- Set rule40 = relations.CreateProgram("rule40", "", "")

154
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 155

rule40.Modify "/*Rule created by Francisco Javier Jiménez 0.1260*(316/1000)-


Calvo*/" & vbCrLf & _ 0.3516*(316/1000)**2+0.2843*(316/1000)**3-
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((1-
"if (280/1000*Cuerda) <= (Cuerda*(NACA2/10)) (NACA2/10))**2)*((NACA2/10)-(316/1000)))))"
PartBody\Sketch.1\Offset.76\Offset = (280/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- Dim rule42 As Rule
0.1260*(280/1000)-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- Set rule42 = relations.CreateProgram("rule42", "", "")
0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ rule42.Modify "/*Rule created by Francisco Javier Jiménez
10)**2)*((NACA2/10)-(280/1000))))) else Calvo*/" & vbCrLf & _
PartBody\Sketch.1\Offset.76\Offset = (280/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- "if (352/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1260*(280/1000)- PartBody\Sketch.1\Offset.78\Offset = (352/1000*Cuerda +
0.3516*(280/1000)**2+0.2843*(280/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
0.1015*(280/1000)**4)*sin(atan(2*(NACA1/100)/((1- 0.1260*(352/1000)-
(NACA2/10))**2)*((NACA2/10)-(280/1000)))))" & vbCrLf 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
&_ 0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(352/1000))))) else
"if (280/1000*Cuerda) <= (Cuerda*(NACA2/10)) PartBody\Sketch.1\Offset.78\Offset = (352/1000*Cuerda +
PartBody\Sketch.1\Offset.106\Offset = NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
(Semienvergadura+((NACA1/100)*(280/1000*Cuerda)*(2*( 0.1260*(352/1000)-
NACA2/10)-280/1000)/(NACA2/10)**2)- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- 0.1015*(352/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1260*(280/1000)- (NACA2/10))**2)*((NACA2/10)-(352/1000)))))" & vbCrLf
0.3516*(280/1000)**2+0.2843*(280/1000)**3- &_
0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(280/1000))))) else "if (352/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.106\Offset = (Semienvergadura PartBody\Sketch.1\Offset.108\Offset =
+((NACA1/100)*(Cuerda-280/1000*Cuerda)*(- (Semienvergadura+((NACA1/100)*(352/1000*Cuerda)*(2*(
2*(NACA2/10)+280/1000+1)/(1-NACA2/10)**2)- NACA2/10)-352/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(280/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
0.1260*(280/1000)- 0.1260*(352/1000)-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
0.1015*(280/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(280/1000)))))" 10)**2)*((NACA2/10)-(352/1000))))) else
PartBody\Sketch.1\Offset.108\Offset =
Dim rule41 As Rule (Semienvergadura+((NACA1/100)*(Cuerda-
Set rule41 = relations.CreateProgram("rule41", "", "") 352/1000*Cuerda)*(-2*(NACA2/10)+352/1000+1)/(1-
NACA2/10)**2)-
rule41.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(352/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(352/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3-
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(352/1000)**4)*cos(atan(2*(NACA1/100)/((1-
PartBody\Sketch.1\Offset.77\Offset = (316/1000*Cuerda +
(NACA2/10))**2)*((NACA2/10)-(352/1000)))))"
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- Dim rule43 As Rule
0.3516*(316/1000)**2+0.2843*(316/1000)**3-
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Set rule43 = relations.CreateProgram("rule43", "", "")
10)**2)*((NACA2/10)-(316/1000))))) else rule43.Modify "/*Rule created by Francisco Javier Jiménez
PartBody\Sketch.1\Offset.77\Offset = (316/1000*Cuerda + Calvo*/" & vbCrLf & _
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(316/1000)**2+0.2843*(316/1000)**3- PartBody\Sketch.1\Offset.79\Offset = (388/1000*Cuerda +
0.1015*(316/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
(NACA2/10))**2)*((NACA2/10)-(316/1000)))))" & vbCrLf 0.1260*(388/1000)-
&_ 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
"if (316/1000*Cuerda) <= (Cuerda*(NACA2/10)) 10)**2)*((NACA2/10)-(388/1000))))) else
PartBody\Sketch.1\Offset.107\Offset = PartBody\Sketch.1\Offset.79\Offset = (388/1000*Cuerda +
(Semienvergadura+((NACA1/100)*(316/1000*Cuerda)*(2*( NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)-
NACA2/10)-316/1000)/(NACA2/10)**2)- 0.1260*(388/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1260*(316/1000)- 0.1015*(388/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- (NACA2/10))**2)*((NACA2/10)-(388/1000)))))" & vbCrLf
0.1015*(316/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ &_
10)**2)*((NACA2/10)-(316/1000))))) else
PartBody\Sketch.1\Offset.107\Offset = (Semienvergadura "if (388/1000*Cuerda) <= (Cuerda*(NACA2/10))
+((NACA1/100)*(Cuerda-316/1000*Cuerda)*(- PartBody\Sketch.1\Offset.109\Offset =
2*(NACA2/10)+316/1000+1)/(1-NACA2/10)**2)- (Semienvergadura+((NACA1/100)*(388/1000*Cuerda)*(2*(
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(316/1000)- NACA2/10)-388/1000)/(NACA2/10)**2)-

155
156
ANEXOS

NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
0.1260*(388/1000)- 0.1260*(460/1000)-
0.3516*(388/1000)**2+0.2843*(388/1000)**3- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(388/1000))))) else (NACA2/10))**2)*((NACA2/10)-(460/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.109\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
388/1000*Cuerda)*(-2*(NACA2/10)+388/1000+1)/(1- "if (460/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA2/10)**2)- PartBody\Sketch.1\Offset.111\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(388/1000)- (Semienvergadura+((NACA1/100)*(460/1000*Cuerda)*(2*(
NACA2/10)-460/1000)/(NACA2/10)**2)-
0.1260*(388/1000)-
0.3516*(388/1000)**2+0.2843*(388/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
0.1015*(388/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(460/1000)-
(NACA2/10))**2)*((NACA2/10)-(388/1000)))))" 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule44 As Rule 10)**2)*((NACA2/10)-(460/1000))))) else
PartBody\Sketch.1\Offset.111\Offset =
Set rule44 = relations.CreateProgram("rule44", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule44.Modify "/*Rule created by Francisco Javier Jiménez 460/1000*Cuerda)*(-2*(NACA2/10)+460/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)-
"if (424/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(460/1000)-
PartBody\Sketch.1\Offset.80\Offset = (424/1000*Cuerda + 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- 0.1015*(460/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(424/1000)- (NACA2/10))**2)*((NACA2/10)-(460/1000)))))"
0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Dim rule46 As Rule
10)**2)*((NACA2/10)-(424/1000))))) else Set rule46 = relations.CreateProgram("rule46", "", "")
PartBody\Sketch.1\Offset.80\Offset = (424/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- rule46.Modify "/*Rule created by Francisco Javier Jiménez
0.1260*(424/1000)- Calvo*/" & vbCrLf & _
0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1/100)/((1- "if (496/1000*Cuerda) <= (Cuerda*(NACA2/10))
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" & vbCrLf PartBody\Sketch.1\Offset.82\Offset = (496/1000*Cuerda +
&_ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(496/1000)-
"if (424/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
PartBody\Sketch.1\Offset.110\Offset = 0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
(Semienvergadura+((NACA1/100)*(424/1000*Cuerda)*(2*( 10)**2)*((NACA2/10)-(496/1000))))) else
NACA2/10)-424/1000)/(NACA2/10)**2)- PartBody\Sketch.1\Offset.82\Offset = (496/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(424/1000)- 0.1260*(496/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(496/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(424/1000))))) else (NACA2/10))**2)*((NACA2/10)-(496/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.110\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
"if (496/1000*Cuerda) <= (Cuerda*(NACA2/10))
424/1000*Cuerda)*(-2*(NACA2/10)+424/1000+1)/(1-
NACA2/10)**2)- PartBody\Sketch.1\Offset.112\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(424/1000)- (Semienvergadura+((NACA1/100)*(496/1000*Cuerda)*(2*(
0.1260*(424/1000)- NACA2/10)-496/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3-
0.1015*(424/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(496/1000)-
(NACA2/10))**2)*((NACA2/10)-(424/1000)))))" 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule45 As Rule 10)**2)*((NACA2/10)-(496/1000))))) else
PartBody\Sketch.1\Offset.112\Offset =
Set rule45 = relations.CreateProgram("rule45", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule45.Modify "/*Rule created by Francisco Javier Jiménez 496/1000*Cuerda)*(-2*(NACA2/10)+496/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(496/1000)-
"if (460/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(496/1000)-
PartBody\Sketch.1\Offset.81\Offset = (460/1000*Cuerda + 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(460/1000)- 0.1015*(496/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(460/1000)- (NACA2/10))**2)*((NACA2/10)-(496/1000)))))"
0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Dim rule47 As Rule
10)**2)*((NACA2/10)-(460/1000))))) else Set rule47 = relations.CreateProgram("rule47", "", "")
PartBody\Sketch.1\Offset.81\Offset = (460/1000*Cuerda +

156
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 157

rule47.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)-


Calvo*/" & vbCrLf & _ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)-
0.1260*(568/1000)-
"if (532/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
PartBody\Sketch.1\Offset.83\Offset = (532/1000*Cuerda + 0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((1-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- (NACA2/10))**2)*((NACA2/10)-(568/1000)))))"
0.1260*(532/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- Dim rule49 As Rule
0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(532/1000))))) else Set rule49 = relations.CreateProgram("rule49", "", "")
PartBody\Sketch.1\Offset.83\Offset = (532/1000*Cuerda + rule49.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- Calvo*/" & vbCrLf & _
0.1260*(532/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- "if (604/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1015*(532/1000)**4)*sin(atan(2*(NACA1/100)/((1- PartBody\Sketch.1\Offset.85\Offset = (604/1000*Cuerda +
(NACA2/10))**2)*((NACA2/10)-(532/1000)))))" & vbCrLf NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
&_ 0.1260*(604/1000)-
0.3516*(604/1000)**2+0.2843*(604/1000)**3-
"if (532/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
PartBody\Sketch.1\Offset.113\Offset = 10)**2)*((NACA2/10)-(604/1000))))) else
(Semienvergadura+((NACA1/100)*(532/1000*Cuerda)*(2*( PartBody\Sketch.1\Offset.85\Offset = (604/1000*Cuerda +
NACA2/10)-532/1000)/(NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- 0.1260*(604/1000)-
0.1260*(532/1000)- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- 0.1015*(604/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ (NACA2/10))**2)*((NACA2/10)-(604/1000)))))" & vbCrLf
10)**2)*((NACA2/10)-(532/1000))))) else &_
PartBody\Sketch.1\Offset.113\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- "if (604/1000*Cuerda) <= (Cuerda*(NACA2/10))
532/1000*Cuerda)*(-2*(NACA2/10)+532/1000+1)/(1- PartBody\Sketch.1\Offset.115\Offset =
NACA2/10)**2)- (Semienvergadura+((NACA1/100)*(604/1000*Cuerda)*(2*(
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(532/1000)- NACA2/10)-604/1000)/(NACA2/10)**2)-
0.1260*(532/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- 0.1260*(604/1000)-
0.1015*(532/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(532/1000)))))" 0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(604/1000))))) else
Dim rule48 As Rule PartBody\Sketch.1\Offset.115\Offset =
Set rule48 = relations.CreateProgram("rule48", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
604/1000*Cuerda)*(-2*(NACA2/10)+604/1000+1)/(1-
rule48.Modify "/*Rule created by Francisco Javier Jiménez NACA2/10)**2)-
Calvo*/" & vbCrLf & _ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(604/1000)-
0.1260*(604/1000)-
"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(604/1000)**2+0.2843*(604/1000)**3-
PartBody\Sketch.1\Offset.84\Offset = (568/1000*Cuerda + 0.1015*(604/1000)**4)*cos(atan(2*(NACA1/100)/((1-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- (NACA2/10))**2)*((NACA2/10)-(604/1000)))))"
0.1260*(568/1000)-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- Dim rule50 As Rule
0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(568/1000))))) else Set rule50 = relations.CreateProgram("rule50", "", "")
PartBody\Sketch.1\Offset.84\Offset = (568/1000*Cuerda + rule50.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- Calvo*/" & vbCrLf & _
0.1260*(568/1000)-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.1015*(568/1000)**4)*sin(atan(2*(NACA1/100)/((1- PartBody\Sketch.1\Offset.86\Offset = (640/1000*Cuerda +
(NACA2/10))**2)*((NACA2/10)-(568/1000)))))" & vbCrLf NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
&_ 0.1260*(640/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3-
"if (568/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
PartBody\Sketch.1\Offset.114\Offset = 10)**2)*((NACA2/10)-(640/1000))))) else
(Semienvergadura+((NACA1/100)*(568/1000*Cuerda)*(2*( PartBody\Sketch.1\Offset.86\Offset = (640/1000*Cuerda +
NACA2/10)-568/1000)/(NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(568/1000)- 0.1260*(640/1000)-
0.1260*(568/1000)- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- 0.1015*(640/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1015*(568/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ (NACA2/10))**2)*((NACA2/10)-(640/1000)))))" & vbCrLf
10)**2)*((NACA2/10)-(568/1000))))) else &_
PartBody\Sketch.1\Offset.114\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda- "if (640/1000*Cuerda) <= (Cuerda*(NACA2/10))
568/1000*Cuerda)*(-2*(NACA2/10)+568/1000+1)/(1- PartBody\Sketch.1\Offset.116\Offset =

157
158
ANEXOS

(Semienvergadura+((NACA1/100)*(640/1000*Cuerda)*(2*( 10)**2)*((NACA2/10)-(712/1000))))) else


NACA2/10)-640/1000)/(NACA2/10)**2)- PartBody\Sketch.1\Offset.88\Offset = (712/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(640/1000)- 0.1260*(712/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(640/1000))))) else (NACA2/10))**2)*((NACA2/10)-(712/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.116\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
640/1000*Cuerda)*(-2*(NACA2/10)+640/1000+1)/(1- "if (712/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.118\Offset =
NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(640/1000)- (Semienvergadura+((NACA1/100)*(712/1000*Cuerda)*(2*(
0.1260*(640/1000)- NACA2/10)-712/1000)/(NACA2/10)**2)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(712/1000)-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(640/1000)))))" 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule51 As Rule 10)**2)*((NACA2/10)-(712/1000))))) else
PartBody\Sketch.1\Offset.118\Offset =
Set rule51 = relations.CreateProgram("rule51", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule51.Modify "/*Rule created by Francisco Javier Jiménez 712/1000*Cuerda)*(-2*(NACA2/10)+712/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)-
"if (676/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(712/1000)-
PartBody\Sketch.1\Offset.87\Offset = (676/1000*Cuerda + 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- 0.1015*(712/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(676/1000)- (NACA2/10))**2)*((NACA2/10)-(712/1000)))))"
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Dim rule53 As Rule
10)**2)*((NACA2/10)-(676/1000))))) else Set rule53 = relations.CreateProgram("rule53", "", "")
PartBody\Sketch.1\Offset.87\Offset = (676/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- rule53.Modify "/*Rule created by Francisco Javier Jiménez
0.1260*(676/1000)- Calvo*/" & vbCrLf & _
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1/100)/((1- "if (748/1000*Cuerda) <= (Cuerda*(NACA2/10))
(NACA2/10))**2)*((NACA2/10)-(676/1000)))))" & vbCrLf PartBody\Sketch.1\Offset.89\Offset = (748/1000*Cuerda +
&_ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.1260*(748/1000)-
"if (676/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
PartBody\Sketch.1\Offset.117\Offset = 0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
(Semienvergadura+((NACA1/100)*(676/1000*Cuerda)*(2*( 10)**2)*((NACA2/10)-(748/1000))))) else
NACA2/10)-676/1000)/(NACA2/10)**2)- PartBody\Sketch.1\Offset.89\Offset = (748/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.1260*(676/1000)- 0.1260*(748/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(748/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(676/1000))))) else (NACA2/10))**2)*((NACA2/10)-(748/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.117\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
676/1000*Cuerda)*(-2*(NACA2/10)+676/1000+1)/(1- "if (748/1000*Cuerda) <= (Cuerda*(NACA2/10))
NACA2/10)**2)- PartBody\Sketch.1\Offset.119\Offset =
(Semienvergadura+((NACA1/100)*(748/1000*Cuerda)*(2*(
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(676/1000)-
0.1260*(676/1000)- NACA2/10)-748/1000)/(NACA2/10)**2)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(748/1000)-
0.3516*(748/1000)**2+0.2843*(748/1000)**3-
(NACA2/10))**2)*((NACA2/10)-(676/1000)))))"
0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule52 As Rule 10)**2)*((NACA2/10)-(748/1000))))) else
PartBody\Sketch.1\Offset.119\Offset =
Set rule52 = relations.CreateProgram("rule52", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule52.Modify "/*Rule created by Francisco Javier Jiménez 748/1000*Cuerda)*(-2*(NACA2/10)+748/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(748/1000)-
"if (712/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(748/1000)-
PartBody\Sketch.1\Offset.88\Offset = (712/1000*Cuerda + 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(712/1000)- 0.1015*(748/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(712/1000)- (NACA2/10))**2)*((NACA2/10)-(748/1000)))))"
0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Dim rule54 As Rule

158
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 159

Set rule54 = relations.CreateProgram("rule54", "", "") 820/1000*Cuerda)*(-2*(NACA2/10)+820/1000+1)/(1-


NACA2/10)**2)-
rule54.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)-
Calvo*/" & vbCrLf & _ 0.1260*(820/1000)-
"if (784/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
PartBody\Sketch.1\Offset.90\Offset = (784/1000*Cuerda + 0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((1-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- (NACA2/10))**2)*((NACA2/10)-(820/1000)))))"
0.1260*(784/1000)- Dim rule56 As Rule
0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Set rule56 = relations.CreateProgram("rule56", "", "")
10)**2)*((NACA2/10)-(784/1000))))) else
PartBody\Sketch.1\Offset.90\Offset = (784/1000*Cuerda + rule56.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- Calvo*/" & vbCrLf & _
0.1260*(784/1000)- "if (856/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(784/1000)**2+0.2843*(784/1000)**3- PartBody\Sketch.1\Offset.92\Offset = (856/1000*Cuerda +
0.1015*(784/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
(NACA2/10))**2)*((NACA2/10)-(784/1000)))))" & vbCrLf 0.1260*(856/1000)-
&_ 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
"if (784/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
10)**2)*((NACA2/10)-(856/1000))))) else
PartBody\Sketch.1\Offset.120\Offset =
(Semienvergadura+((NACA1/100)*(784/1000*Cuerda)*(2*( PartBody\Sketch.1\Offset.92\Offset = (856/1000*Cuerda +
NACA2/10)-784/1000)/(NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- 0.1260*(856/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3-
0.1260*(784/1000)-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- 0.1015*(856/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ (NACA2/10))**2)*((NACA2/10)-(856/1000)))))" & vbCrLf
10)**2)*((NACA2/10)-(784/1000))))) else &_
PartBody\Sketch.1\Offset.120\Offset = "if (856/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Semienvergadura+((NACA1/100)*(Cuerda- PartBody\Sketch.1\Offset.122\Offset =
784/1000*Cuerda)*(-2*(NACA2/10)+784/1000+1)/(1- (Semienvergadura+((NACA1/100)*(856/1000*Cuerda)*(2*(
NACA2/10)**2)- NACA2/10)-856/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(784/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
0.1260*(784/1000)- 0.1260*(856/1000)-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
(NACA2/10))**2)*((NACA2/10)-(784/1000)))))" 10)**2)*((NACA2/10)-(856/1000))))) else
Dim rule55 As Rule PartBody\Sketch.1\Offset.122\Offset =
(Semienvergadura+((NACA1/100)*(Cuerda-
Set rule55 = relations.CreateProgram("rule55", "", "") 856/1000*Cuerda)*(-2*(NACA2/10)+856/1000+1)/(1-
NACA2/10)**2)-
rule55.Modify "/*Rule created by Francisco Javier Jiménez NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(856/1000)-
Calvo*/" & vbCrLf & _
0.1260*(856/1000)-
"if (820/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
PartBody\Sketch.1\Offset.91\Offset = (820/1000*Cuerda + 0.1015*(856/1000)**4)*cos(atan(2*(NACA1/100)/((1-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)- (NACA2/10))**2)*((NACA2/10)-(856/1000)))))"
0.1260*(820/1000)- Dim rule57 As Rule
0.3516*(820/1000)**2+0.2843*(820/1000)**3-
0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Set rule57 = relations.CreateProgram("rule57", "", "")
10)**2)*((NACA2/10)-(820/1000))))) else
PartBody\Sketch.1\Offset.91\Offset = (820/1000*Cuerda + rule57.Modify "/*Rule created by Francisco Javier Jiménez
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)- Calvo*/" & vbCrLf & _
0.1260*(820/1000)- "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))
0.3516*(820/1000)**2+0.2843*(820/1000)**3- PartBody\Sketch.1\Offset.93\Offset = (892/1000*Cuerda +
0.1015*(820/1000)**4)*sin(atan(2*(NACA1/100)/((1- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
(NACA2/10))**2)*((NACA2/10)-(820/1000)))))" & vbCrLf 0.1260*(892/1000)-
&_ 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
"if (820/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
PartBody\Sketch.1\Offset.121\Offset = 10)**2)*((NACA2/10)-(892/1000))))) else
PartBody\Sketch.1\Offset.93\Offset = (892/1000*Cuerda +
(Semienvergadura+((NACA1/100)*(820/1000*Cuerda)*(2*(
NACA2/10)-820/1000)/(NACA2/10)**2)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(820/1000)- 0.1260*(892/1000)-
0.1260*(820/1000)- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 0.1015*(892/1000)**4)*sin(atan(2*(NACA1/100)/((1-
0.1015*(820/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ (NACA2/10))**2)*((NACA2/10)-(892/1000)))))" & vbCrLf
10)**2)*((NACA2/10)-(820/1000))))) else &_
PartBody\Sketch.1\Offset.121\Offset = "if (892/1000*Cuerda) <= (Cuerda*(NACA2/10))
(Semienvergadura+((NACA1/100)*(Cuerda-

159
160
ANEXOS

PartBody\Sketch.1\Offset.123\Offset = 0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/
(Semienvergadura+((NACA1/100)*(892/1000*Cuerda)*(2*( 10)**2)*((NACA2/10)-(964/1000))))) else
NACA2/10)-892/1000)/(NACA2/10)**2)- PartBody\Sketch.1\Offset.95\Offset = (964/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
0.1260*(892/1000)- 0.1260*(964/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3- 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(964/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(892/1000))))) else (NACA2/10))**2)*((NACA2/10)-(964/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.123\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10))
892/1000*Cuerda)*(-2*(NACA2/10)+892/1000+1)/(1-
NACA2/10)**2)- PartBody\Sketch.1\Offset.125\Offset =
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(892/1000)- (Semienvergadura+((NACA1/100)*(964/1000*Cuerda)*(2*(
0.1260*(892/1000)- NACA2/10)-964/1000)/(NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.1015*(892/1000)**4)*cos(atan(2*(NACA1/100)/((1- 0.1260*(964/1000)-
(NACA2/10))**2)*((NACA2/10)-(892/1000)))))" 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/
Dim rule58 As Rule 10)**2)*((NACA2/10)-(964/1000))))) else
PartBody\Sketch.1\Offset.125\Offset =
Set rule58 = relations.CreateProgram("rule58", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule58.Modify "/*Rule created by Francisco Javier Jiménez 964/1000*Cuerda)*(-2*(NACA2/10)+964/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)-
"if (928/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(964/1000)-
PartBody\Sketch.1\Offset.94\Offset = (928/1000*Cuerda + 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- 0.1015*(964/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(928/1000)- (NACA2/10))**2)*((NACA2/10)-(964/1000)))))"
0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2/ Dim rule60 As Rule
10)**2)*((NACA2/10)-(928/1000))))) else Set rule60 = relations.CreateProgram("rule60", "", "")
PartBody\Sketch.1\Offset.94\Offset = (928/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- rule60.Modify "/*Rule created by Francisco Javier Jiménez
0.1260*(928/1000)- Calvo*/" & vbCrLf & _
0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.1015*(928/1000)**4)*sin(atan(2*(NACA1/100)/((1- "if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10))
(NACA2/10))**2)*((NACA2/10)-(928/1000)))))" & vbCrLf PartBody\Sketch.1\Offset.96\Offset = (1000/1000*Cuerda +
&_ NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(1000/1000)-
"if (928/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
PartBody\Sketch.1\Offset.124\Offset = 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((NACA2
(Semienvergadura+((NACA1/100)*(928/1000*Cuerda)*(2*( /10)**2)*((NACA2/10)-(1000/1000))))) else
NACA2/10)-928/1000)/(NACA2/10)**2)- PartBody\Sketch.1\Offset.96\Offset = (1000/1000*Cuerda +
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(928/1000)- 0.1260*(1000/1000)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((NACA2/ 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1/100)/((1-
10)**2)*((NACA2/10)-(928/1000))))) else (NACA2/10))**2)*((NACA2/10)-(1000/1000)))))" & vbCrLf
PartBody\Sketch.1\Offset.124\Offset = &_
(Semienvergadura+((NACA1/100)*(Cuerda-
928/1000*Cuerda)*(-2*(NACA2/10)+928/1000+1)/(1- "if (1000/1000*Cuerda) <= (Cuerda*(NACA2/10))
PartBody\Sketch.1\Offset.126\Offset =
NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(928/1000)- (Semienvergadura+((NACA1/100)*(1000/1000*Cuerda)*(2*(
0.1260*(928/1000)- NACA2/10)-1000/1000)/(NACA2/10)**2)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
0.1260*(1000/1000)-
0.1015*(928/1000)**4)*cos(atan(2*(NACA1/100)/((1-
(NACA2/10))**2)*((NACA2/10)-(928/1000)))))" 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((NACA
Dim rule59 As Rule 2/10)**2)*((NACA2/10)-(1000/1000))))) else
PartBody\Sketch.1\Offset.126\Offset =
Set rule59 = relations.CreateProgram("rule59", "", "") (Semienvergadura+((NACA1/100)*(Cuerda-
rule59.Modify "/*Rule created by Francisco Javier Jiménez 1000/1000*Cuerda)*(-2*(NACA2/10)+1000/1000+1)/(1-
Calvo*/" & vbCrLf & _ NACA2/10)**2)-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(1000/1000)-
"if (964/1000*Cuerda) <= (Cuerda*(NACA2/10)) 0.1260*(1000/1000)-
PartBody\Sketch.1\Offset.95\Offset = (964/1000*Cuerda + 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
NACA34/(100*0.2)*Cuerda*(0.2969*sqrt(964/1000)- 0.1015*(1000/1000)**4)*cos(atan(2*(NACA1/100)/((1-
0.1260*(964/1000)- (NACA2/10))**2)*((NACA2/10)-(1000/1000)))))"
0.3516*(964/1000)**2+0.2843*(964/1000)**3-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

160
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 161

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' arrayOfVariantOfDouble2(3) = 0# ' Componente del


eje x absoluto que establece el vector unidad x en el sketch
' CUERPO DEL ALA '
arrayOfVariantOfDouble2(4) = 1# ' Componente del
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' eje y absoluto que establece el vector unidad x en el sketch
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' arrayOfVariantOfDouble2(5) = 0# ' Componente del
' Ahora debemos crear un plano paralelo al plano YZ a una eje z absoluto que establece el vector unidad x en el sketch
distancia igual a Semienvergadura de dicho plano.
arrayOfVariantOfDouble2(6) = 0# ' Componente del
Dim hybridShapePlaneExplicit1 As HybridShapePlaneExplicit eje x absoluto que establece el vector unidad y en el sketch

Set hybridShapePlaneExplicit1 = originElements1.PlaneYZ arrayOfVariantOfDouble2(7) = 0# ' Componente del


eje y absoluto que establece el vector unidad y en el sketch
Dim reference131 As Reference
arrayOfVariantOfDouble2(8) = 1# ' Componente del
Set reference131 = eje z absoluto que establece el vector unidad y en el sketch
part1.CreateReferenceFromObject(hybridShapePlaneExplicit1
) Set sketch2Variant = sketch2

Dim hybridShapeFactory1 As HybridShapeFactory sketch2Variant.SetAbsoluteAxisData


arrayOfVariantOfDouble2 'Sistema absoluto 3D para el sketch
Set hybridShapeFactory1 = part1.HybridShapeFactory
part1.InWorkObject = sketch2
Dim hybridShapePlaneOffset1 As HybridShapePlaneOffset
' Establecimiento del conjunto de herramientas 2D y asignarlo
Set hybridShapePlaneOffset1 = al sketch de trabajo
hybridShapeFactory1.AddNewPlaneOffset(reference131,
1000#, True) Dim factory2D2 As Factory2D

Dim Offset1 As Length Set factory2D2 = sketch2.OpenEdition()

Set Offset1 = hybridShapePlaneOffset1.Offset ' Se establecen los elementos geométricos

Dim formula6 As Formula Dim geometricElements2 As GeometricElements

Set formula6 = relations.CreateFormula("Distancia Set geometricElements2 = sketch2.GeometricElements


Semienvergadura", "Semienvergadura", Offset1, ' Se define el sistema de ejes dentro del sketch
"Semienvergadura")
Dim axis2D2 As Axis2D
body1.InsertHybridShape hybridShapePlaneOffset1
Set axis2D2 = geometricElements2.Item("AbsoluteAxis")
part1.InWorkObject = hybridShapePlaneOffset1
' Establecimiento de las direcciones horizontal y vertical
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim line2D5 As Line2D
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set line2D5 = axis2D2.GetItem("HDirection")
''''' PERFIL PUNTA ALA '''''
line2D5.ReportName = 73
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim line2D6 As Line2D
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set line2D6 = axis2D2.GetItem("VDirection")
' Ahora debemos abrir un nuevo sketch donde dibujaremos el
perfil NACA de la raiz del ala. line2D6.ReportName = 74
' Dicho sketch irá situado en el nuevo plano creado. ' Creamos todos los ControlPoints que van a definir el extrados
(67-96) y el intrados (97-126)
Dim hybridShapes1 As HybridShapes
Dim point2D67 As ControlPoint2D
Set hybridShapes1 = body1.HybridShapes
Set point2D67 =
Dim reference132 As Reference factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set reference132 = hybridShapes1.Item("Plane.1") point2D67.ReportName = 6 + 67
Dim sketch2 As Sketch
Dim point2D68 As ControlPoint2D
Set sketch2 = sketches1.Add(reference132) Set point2D68 =
Dim arrayOfVariantOfDouble2(8) factory2D2.CreateControlPoint(9999999999#, CuerdaValor)

arrayOfVariantOfDouble2(0) = 0# ' Coordenada x del point2D68.ReportName = 6 + 68


origen de coordenadas del sketch
arrayOfVariantOfDouble2(1) = 0# ' Coordenada y del Dim point2D69 As ControlPoint2D
origen de coordenadas del sketch
Set point2D69 =
arrayOfVariantOfDouble2(2) = 0# ' Coordenada z del factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
origen de coordenadas del sketch
point2D69.ReportName = 6 + 69

161
162
ANEXOS

Dim point2D70 As ControlPoint2D point2D81.ReportName = 6 + 81


Set point2D70 = Dim point2D82 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D82 =
point2D70.ReportName = 6 + 70 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D71 As ControlPoint2D point2D82.ReportName = 6 + 82
Set point2D71 = Dim point2D83 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D83 =
point2D71.ReportName = 6 + 71 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D72 As ControlPoint2D point2D83.ReportName = 6 + 83
Set point2D72 = Dim point2D84 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D84 =
point2D72.ReportName = 6 + 72 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D73 As ControlPoint2D point2D84.ReportName = 6 + 84
Set point2D73 = Dim point2D85 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D85 =
point2D73.ReportName = 6 + 73 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D74 As ControlPoint2D point2D85.ReportName = 6 + 85
Set point2D74 = Dim point2D86 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D86 =
point2D74.ReportName = 6 + 74 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D75 As ControlPoint2D point2D86.ReportName = 6 + 86
Set point2D75 = Dim point2D87 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D87 =
point2D75.ReportName = 6 + 75 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D76 As ControlPoint2D point2D87.ReportName = 6 + 87
Set point2D76 = Dim point2D88 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D88 =
point2D76.ReportName = 6 + 76 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D77 As ControlPoint2D point2D88.ReportName = 6 + 88
Set point2D77 = Dim point2D89 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D89 =
point2D77.ReportName = 6 + 77 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D78 As ControlPoint2D point2D89.ReportName = 6 + 89
Set point2D78 = Dim point2D90 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D90 =
point2D78.ReportName = 6 + 78 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D79 As ControlPoint2D point2D90.ReportName = 6 + 90
Set point2D79 = Dim point2D91 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D91 =
point2D79.ReportName = 6 + 79 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D80 As ControlPoint2D point2D91.ReportName = 6 + 91
Set point2D80 = Dim point2D92 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D92 =
point2D80.ReportName = 6 + 80 factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim point2D81 As ControlPoint2D point2D92.ReportName = 6 + 92
Set point2D81 = Dim point2D93 As ControlPoint2D
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Set point2D93 =

162
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 163

factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D105 =


factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D93.ReportName = 6 + 93
point2D105.ReportName = 6 + 105
Dim point2D94 As ControlPoint2D
Dim point2D106 As ControlPoint2D
Set point2D94 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D106 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D94.ReportName = 6 + 94
point2D106.ReportName = 6 + 106
Dim point2D95 As ControlPoint2D
Dim point2D107 As ControlPoint2D
Set point2D95 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D107 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D95.ReportName = 6 + 95
point2D107.ReportName = 6 + 107
Dim point2D96 As ControlPoint2D
Dim point2D108 As ControlPoint2D
Set point2D96 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D108 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D96.ReportName = 6 + 96
point2D108.ReportName = 6 + 108
Dim point2D97 As ControlPoint2D
Dim point2D109 As ControlPoint2D
Set point2D97 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D109 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D97.ReportName = 6 + 97
point2D109.ReportName = 6 + 109
Dim point2D98 As ControlPoint2D
Dim point2D110 As ControlPoint2D
Set point2D98 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D110 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D98.ReportName = 6 + 98
point2D110.ReportName = 6 + 110
Dim point2D99 As ControlPoint2D
Dim point2D111 As ControlPoint2D
Set point2D99 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D111 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D99.ReportName = 6 + 99
point2D111.ReportName = 6 + 111
Dim point2D100 As ControlPoint2D
Dim point2D112 As ControlPoint2D
Set point2D100 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D112 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D100.ReportName = 6 + 100
point2D112.ReportName = 6 + 112
Dim point2D101 As ControlPoint2D
Dim point2D113 As ControlPoint2D
Set point2D101 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D113 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D101.ReportName = 6 + 101
point2D113.ReportName = 6 + 113
Dim point2D102 As ControlPoint2D
Dim point2D114 As ControlPoint2D
Set point2D102 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D114 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D102.ReportName = 6 + 102
point2D114.ReportName = 6 + 114
Dim point2D103 As ControlPoint2D
Dim point2D115 As ControlPoint2D
Set point2D103 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D115 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D103.ReportName = 6 + 103
point2D115.ReportName = 6 + 115
Dim point2D104 As ControlPoint2D
Dim point2D116 As ControlPoint2D
Set point2D104 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set point2D116 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
point2D104.ReportName = 6 + 104
point2D116.ReportName = 6 + 116
Dim point2D105 As ControlPoint2D
Dim point2D117 As ControlPoint2D

163
164
ANEXOS

Set point2D117 = Set point2D128 = factory2D2.CreatePoint(9999999999#,


factory2D2.CreateControlPoint(9999999999#, CuerdaValor) CuerdaValor)
point2D117.ReportName = 6 + 117 point2D128.ReportName = 134
Dim point2D118 As ControlPoint2D point2D128.Construction = False
Set point2D118 = '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
point2D118.ReportName = 6 + 118
''' FLECHA Y TORSIÓN '''
Dim point2D119 As ControlPoint2D
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set point2D119 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

point2D119.ReportName = 6 + 119 ' Creamos las lineas de construcción de referencia para


parametrizar la torsión y flecha del ala. Para ello acotamos '
Dim point2D120 As ControlPoint2D
' el punto del borde de ataque (no el control point) y creamos
Set point2D120 = una linea coincidente con dicho punto y con un ángulo '
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
' con la vertical igual al ángulo de torsión. Por último creamos
point2D120.ReportName = 6 + 120 una linea perpendicular a ésta última que pase por '
Dim point2D121 As ControlPoint2D ' el origen de coordenadas y por último acotamos el perfil
sobre estas lineas de referencia. '
Set point2D121 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
point2D121.ReportName = 6 + 121 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim point2D122 As ControlPoint2D ' Acotamos el punto del borde de ataque para poder crear las
lineas de referencia
Set point2D122 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) ' para la torsión.
point2D122.ReportName = 6 + 122 ' Definimos las constraints del punto acotando este en
distancias a ambas direcciones del sketch.
Dim point2D123 As ControlPoint2D
Dim constraints2 As constraints
Set point2D123 =
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Set constraints2 = sketch2.constraints
point2D123.ReportName = 6 + 123 Dim reference133 As Reference
Dim point2D124 As ControlPoint2D Set reference133 =
part1.CreateReferenceFromObject(line2D6) 'Referencia al eje
Set point2D124 = vertical
factory2D2.CreateControlPoint(9999999999#, CuerdaValor)
Dim reference134 As Reference
point2D124.ReportName = 6 + 124
Set reference134 =
Dim point2D125 As ControlPoint2D part1.CreateReferenceFromObject(line2D5) 'Referencia al eje
Set point2D125 = horizontal
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) ' Acotamos y parametrizamos la Flecha y el diedro.
point2D125.ReportName = 6 + 125 Dim reference135 As Reference
Dim point2D126 As ControlPoint2D Set reference135 =
Set point2D126 = part1.CreateReferenceFromObject(point2D128)
factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Dim constraint129 As Constraint
point2D126.ReportName = 6 + 126 Set constraint129 =
' Creamos el punto del borde de ataque tanto como control constraints2.AddBiEltCst(catCstTypeDistance, reference133,
point como en point, ya que nos hará falta reference135)

' posteriormente para crear la linea que define la extrusión. constraint129.Mode = catCstModeDrivingDimension

Dim point2D127 As ControlPoint2D Dim length129 As Length

Set point2D127 = Set length129 = constraint129.Dimension


factory2D2.CreateControlPoint(9999999999#, CuerdaValor) Dim formula7 As Formula
point2D127.ReportName = 133 Set formula7 = relations.CreateFormula("Punto borde de
Dim point2D128 As Point2D ataque punta ala", "Borde de ataque", length129,
"Semienvergadura + Semienvergadura*tan(Flecha)")

164
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 165

Dim reference136 As Reference Dim reference138 As Reference


Set reference136 = Set reference138 =
part1.CreateReferenceFromObject(point2D128) part1.CreateReferenceFromObject(line2D7)
Dim constraint130 As Constraint Dim reference139 As Reference
Set constraint130 = Set reference139 =
constraints2.AddBiEltCst(catCstTypeDistance, reference134, part1.CreateReferenceFromObject(point2D128)
reference135)
Dim constraint132 As Constraint
constraint130.Mode = catCstModeDrivingDimension
Set constraint132 = constraints2.AddBiEltCst(catCstTypeOn,
Dim length130 As Length reference138, reference139)
Set length130 = constraint130.Dimension constraint132.Mode = catCstModeDrivingDimension
Dim formula8 As Formula ' Linea "horizontal de referencia".
Set formula8 = relations.CreateFormula("Punto control borde Dim point2D131 As Point2D
de ataque raiz", "Borde de ataque", length130,
"Semienvergadura + Semienvergadura*tan(Diedro)") Set point2D131 = factory2D2.CreatePoint(-7000, 7000)
point2D131.ReportName = 138
' Creamos las lineas que utilizaremos como referencia.
Comenzamos por la "vertical". Dim point2D132 As Point2D
' Se crean los puntos de interes. Set point2D132 = factory2D2.CreatePoint(7000, -7000)
Dim point2D129 As Point2D point2D132.ReportName = 139
Set point2D129 = factory2D2.CreatePoint(-7000#, -7000#) Dim line2D8 As Line2D
point2D129.ReportName = 135 Set line2D8 = factory2D2.CreateLine(-7000, 7000, 7000, -
Dim point2D130 As Point2D 7000)

Set point2D130 = factory2D2.CreatePoint(7000#, 7000#) line2D8.ReportName = 140

point2D130.ReportName = 136 line2D8.Construction = True

'Se crea la linea line2D8.StartPoint = point2D131

Dim line2D7 As Line2D line2D8.EndPoint = point2D132

Set line2D7 = factory2D2.CreateLine(-7000#, -7000#, 7000#, Dim reference140 As Reference


7000#) Set reference140 =
part1.CreateReferenceFromObject(line2D8)
line2D7.ReportName = 137
line2D7.Construction = True Dim constraint133 As Constraint

line2D7.StartPoint = point2D129 Set constraint133 =


constraints2.AddBiEltCst(catCstTypePerpendicularity,
line2D7.EndPoint = point2D130 reference140, reference138)
' Acotamos la linea. En primer lugar que forme un ángulo con constraint133.Mode = catCstModeDrivingDimension
la dirección vertical y en segundo
Dim reference141 As Reference
' lugar que sea coincidente con el punto del borde de ataque.
Set reference141 =
Dim reference137 As Reference part1.CreateReferenceFromObject(point2D128)
Set reference137 = Dim constraint134 As Constraint
part1.CreateReferenceFromObject(line2D7)
Set constraint134 =
Dim constraint131 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference140,
reference141)
Set constraint131 =
constraints2.AddBiEltCst(catCstTypeAngle, reference137, constraint134.Mode = catCstModeDrivingDimension
reference133)
Dim length134 As Length
constraint131.Mode = catCstModeDrivingDimension
Set length134 = constraint134.Dimension
constraint131.AngleSector = catCstAngleSector0
Dim formula10 As Formula
Dim angle131 As Angle
Set formula10 = relations.CreateFormula("Punto control borde
Set angle131 = constraint131.Dimension de ataque punta ala", "Borde de ataque", length134,
"Semienvergadura*tan(Diedro)+Semienvergadura")
Dim formula9 As Formula
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set formula9 = relations.CreateFormula("Linea referencia
Torsión", "Torsión", angle131, "Torsion + Incidencia") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

165
166
ANEXOS

' Acotamos los puntos del perfil del encastre respecto a las reference148)
lineas de referencia nuevas.
constraint139.Mode = catCstModeDrivingDimension
Dim reference142 As Reference
Dim reference149 As Reference
Set reference142 =
part1.CreateReferenceFromObject(line2D7) ' Vertical Set reference149 =
part1.CreateReferenceFromObject(point2D72)
Dim reference143 As Reference
Dim constraint140 As Constraint
Set reference143 =
part1.CreateReferenceFromObject(line2D8) ' Horizontal Set constraint140 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' reference149)
' En primer lugar vamos a acotar los puntos del Extradós por su constraint140.Mode = catCstModeDrivingDimension
distancia al eje vertical '
Dim reference150 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set reference150 =
Dim reference144 As Reference part1.CreateReferenceFromObject(point2D73)
Set reference144 = Dim constraint141 As Constraint
part1.CreateReferenceFromObject(point2D67)
Set constraint141 =
Dim constraint135 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference150)
Set constraint135 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint141.Mode = catCstModeDrivingDimension
reference144)
Dim reference151 As Reference
constraint135.Mode = catCstModeDrivingDimension
Set reference151 =
Dim reference145 As Reference part1.CreateReferenceFromObject(point2D74)
Set reference145 = Dim constraint142 As Constraint
part1.CreateReferenceFromObject(point2D68)
Set constraint142 =
Dim constraint136 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference151)
Set constraint136 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint142.Mode = catCstModeDrivingDimension
reference145)
Dim reference152 As Reference
constraint136.Mode = catCstModeDrivingDimension
Set reference152 =
Dim reference146 As Reference part1.CreateReferenceFromObject(point2D75)
Set reference146 = Dim constraint143 As Constraint
part1.CreateReferenceFromObject(point2D69)
Set constraint143 =
Dim constraint137 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference152)
Set constraint137 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint143.Mode = catCstModeDrivingDimension
reference146)
Dim reference153 As Reference
constraint137.Mode = catCstModeDrivingDimension
Set reference153 =
Dim reference147 As Reference part1.CreateReferenceFromObject(point2D76)
Set reference147 = Dim constraint144 As Constraint
part1.CreateReferenceFromObject(point2D70)
Set constraint144 =
Dim constraint138 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference153)
Set constraint138 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint144.Mode = catCstModeDrivingDimension
reference147)
Dim reference154 As Reference
constraint138.Mode = catCstModeDrivingDimension
Set reference154 =
Dim reference148 As Reference part1.CreateReferenceFromObject(point2D77)
Set reference148 = Dim constraint145 As Constraint
part1.CreateReferenceFromObject(point2D71)
Set constraint145 =
Dim constraint139 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference154)
Set constraint139 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint145.Mode = catCstModeDrivingDimension

166
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 167

Dim reference155 As Reference part1.CreateReferenceFromObject(point2D84)


Set reference155 = Dim constraint152 As Constraint
part1.CreateReferenceFromObject(point2D78)
Set constraint152 =
Dim constraint146 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference161)
Set constraint146 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint152.Mode = catCstModeDrivingDimension
reference155)
Dim reference162 As Reference
constraint146.Mode = catCstModeDrivingDimension
Set reference162 =
Dim reference156 As Reference part1.CreateReferenceFromObject(point2D85)
Set reference156 = Dim constraint153 As Constraint
part1.CreateReferenceFromObject(point2D79)
Set constraint153 =
Dim constraint147 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference162)
Set constraint147 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint153.Mode = catCstModeDrivingDimension
reference156)
Dim reference163 As Reference
constraint147.Mode = catCstModeDrivingDimension
Set reference163 =
Dim reference157 As Reference part1.CreateReferenceFromObject(point2D86)
Set reference157 = Dim constraint154 As Constraint
part1.CreateReferenceFromObject(point2D80)
Set constraint154 =
Dim constraint148 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference163)
Set constraint148 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint154.Mode = catCstModeDrivingDimension
reference157)
Dim reference164 As Reference
constraint148.Mode = catCstModeDrivingDimension
Set reference164 =
Dim reference158 As Reference part1.CreateReferenceFromObject(point2D87)
Set reference158 = Dim constraint155 As Constraint
part1.CreateReferenceFromObject(point2D81)
Set constraint155 =
Dim constraint149 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference164)
Set constraint149 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint155.Mode = catCstModeDrivingDimension
reference158)
Dim reference165 As Reference
constraint149.Mode = catCstModeDrivingDimension
Set reference165 =
Dim reference159 As Reference part1.CreateReferenceFromObject(point2D88)
Set reference159 = Dim constraint156 As Constraint
part1.CreateReferenceFromObject(point2D82)
Set constraint156 =
Dim constraint150 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference165)
Set constraint150 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint156.Mode = catCstModeDrivingDimension
reference159)
Dim reference166 As Reference
constraint150.Mode = catCstModeDrivingDimension
Set reference166 =
Dim reference160 As Reference part1.CreateReferenceFromObject(point2D89)
Set reference160 = Dim constraint157 As Constraint
part1.CreateReferenceFromObject(point2D83)
Set constraint157 =
Dim constraint151 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference166)
Set constraint151 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint157.Mode = catCstModeDrivingDimension
reference160)
Dim reference167 As Reference
constraint151.Mode = catCstModeDrivingDimension
Set reference167 =
Dim reference161 As Reference part1.CreateReferenceFromObject(point2D90)
Set reference161 = Dim constraint158 As Constraint

167
168
ANEXOS

Set constraint158 = reference173)


constraints2.AddBiEltCst(catCstTypeDistance, reference142,
constraint164.Mode = catCstModeDrivingDimension
reference167)
constraint158.Mode = catCstModeDrivingDimension '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim reference168 As Reference ' En segundo lugar vamos a acotar los puntos del Extradós por
su distancia al eje horizontal '
Set reference168 =
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.CreateReferenceFromObject(point2D91)
Dim constraint159 As Constraint Dim reference174 As Reference

Set constraint159 = Set reference174 =


constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D67)
reference168) Dim constraint165 As Constraint
constraint159.Mode = catCstModeDrivingDimension Set constraint165 =
Dim reference169 As Reference constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference174)
Set reference169 =
part1.CreateReferenceFromObject(point2D92) constraint165.Mode = catCstModeDrivingDimension

Dim constraint160 As Constraint Dim reference175 As Reference

Set constraint160 = Set reference175 =


constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D68)
reference169) Dim constraint166 As Constraint
constraint160.Mode = catCstModeDrivingDimension Set constraint166 =
Dim reference170 As Reference constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference175)
Set reference170 =
part1.CreateReferenceFromObject(point2D93) constraint166.Mode = catCstModeDrivingDimension

Dim constraint161 As Constraint Dim reference176 As Reference

Set constraint161 = Set reference176 =


constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D69)
reference170) Dim constraint167 As Constraint
constraint161.Mode = catCstModeDrivingDimension Set constraint167 =
Dim reference171 As Reference constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference176)
Set reference171 =
part1.CreateReferenceFromObject(point2D94) constraint167.Mode = catCstModeDrivingDimension

Dim constraint162 As Constraint Dim reference177 As Reference

Set constraint162 = Set reference177 =


constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D70)
reference171) Dim constraint168 As Constraint
constraint162.Mode = catCstModeDrivingDimension Set constraint168 =
Dim reference172 As Reference constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference177)
Set reference172 =
part1.CreateReferenceFromObject(point2D95) constraint168.Mode = catCstModeDrivingDimension

Dim constraint163 As Constraint Dim reference178 As Reference

Set constraint163 = Set reference178 =


constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D71)
reference172) Dim constraint169 As Constraint
constraint163.Mode = catCstModeDrivingDimension Set constraint169 =
Dim reference173 As Reference constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference178)
Set reference173 =
part1.CreateReferenceFromObject(point2D96) constraint169.Mode = catCstModeDrivingDimension
Dim reference179 As Reference
Dim constraint164 As Constraint
Set constraint164 = Set reference179 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, part1.CreateReferenceFromObject(point2D72)

168
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 169

Dim constraint170 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,


reference185)
Set constraint170 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint176.Mode = catCstModeDrivingDimension
reference179)
Dim reference186 As Reference
constraint170.Mode = catCstModeDrivingDimension
Set reference186 =
Dim reference180 As Reference part1.CreateReferenceFromObject(point2D79)
Set reference180 = Dim constraint177 As Constraint
part1.CreateReferenceFromObject(point2D73)
Set constraint177 =
Dim constraint171 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference186)
Set constraint171 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint177.Mode = catCstModeDrivingDimension
reference180)
Dim reference187 As Reference
constraint171.Mode = catCstModeDrivingDimension
Set reference187 =
Dim reference181 As Reference part1.CreateReferenceFromObject(point2D80)
Set reference181 = Dim constraint178 As Constraint
part1.CreateReferenceFromObject(point2D74)
Set constraint178 =
Dim constraint172 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference187)
Set constraint172 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint178.Mode = catCstModeDrivingDimension
reference181)
Dim reference188 As Reference
constraint172.Mode = catCstModeDrivingDimension
Set reference188 =
Dim reference182 As Reference part1.CreateReferenceFromObject(point2D81)
Set reference182 = Dim constraint179 As Constraint
part1.CreateReferenceFromObject(point2D75)
Set constraint179 =
Dim constraint173 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference188)
Set constraint173 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint179.Mode = catCstModeDrivingDimension
reference182)
Dim reference189 As Reference
constraint173.Mode = catCstModeDrivingDimension
Set reference189 =
Dim reference183 As Reference part1.CreateReferenceFromObject(point2D82)
Set reference183 = Dim constraint180 As Constraint
part1.CreateReferenceFromObject(point2D76)
Set constraint180 =
Dim constraint174 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference189)
Set constraint174 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint180.Mode = catCstModeDrivingDimension
reference183)
Dim reference190 As Reference
constraint174.Mode = catCstModeDrivingDimension
Set reference190 =
Dim reference184 As Reference part1.CreateReferenceFromObject(point2D83)
Set reference184 = Dim constraint181 As Constraint
part1.CreateReferenceFromObject(point2D77)
Set constraint181 =
Dim constraint175 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference190)
Set constraint175 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint181.Mode = catCstModeDrivingDimension
reference184)
Dim reference191 As Reference
constraint175.Mode = catCstModeDrivingDimension
Set reference191 =
Dim reference185 As Reference part1.CreateReferenceFromObject(point2D84)
Set reference185 = Dim constraint182 As Constraint
part1.CreateReferenceFromObject(point2D78)
Set constraint182 =
Dim constraint176 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference191)
Set constraint176 =

169
170
ANEXOS

constraint182.Mode = catCstModeDrivingDimension Set reference198 =


part1.CreateReferenceFromObject(point2D91)
Dim reference192 As Reference
Dim constraint189 As Constraint
Set reference192 =
part1.CreateReferenceFromObject(point2D85) Set constraint189 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint183 As Constraint reference198)
Set constraint183 =
constraint189.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference192) Dim reference199 As Reference
constraint183.Mode = catCstModeDrivingDimension Set reference199 =
part1.CreateReferenceFromObject(point2D92)
Dim reference193 As Reference
Dim constraint190 As Constraint
Set reference193 =
part1.CreateReferenceFromObject(point2D86) Set constraint190 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint184 As Constraint reference199)
Set constraint184 = constraint190.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference193) Dim reference200 As Reference
constraint184.Mode = catCstModeDrivingDimension Set reference200 =
part1.CreateReferenceFromObject(point2D93)
Dim reference194 As Reference
Dim constraint191 As Constraint
Set reference194 =
part1.CreateReferenceFromObject(point2D87) Set constraint191 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint185 As Constraint reference200)
Set constraint185 = constraint191.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference194) Dim reference201 As Reference
constraint185.Mode = catCstModeDrivingDimension Set reference201 =
part1.CreateReferenceFromObject(point2D94)
Dim reference195 As Reference
Dim constraint192 As Constraint
Set reference195 =
part1.CreateReferenceFromObject(point2D88) Set constraint192 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint186 As Constraint reference201)
Set constraint186 = constraint192.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference195) Dim reference202 As Reference
constraint186.Mode = catCstModeDrivingDimension Set reference202 =
part1.CreateReferenceFromObject(point2D95)
Dim reference196 As Reference
Dim constraint193 As Constraint
Set reference196 =
part1.CreateReferenceFromObject(point2D89) Set constraint193 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint187 As Constraint reference202)
Set constraint187 = constraint193.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference196) Dim reference203 As Reference
constraint187.Mode = catCstModeDrivingDimension Set reference203 =
part1.CreateReferenceFromObject(point2D96)
Dim reference197 As Reference
Dim constraint194 As Constraint
Set reference197 =
part1.CreateReferenceFromObject(point2D90) Set constraint194 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint188 As Constraint reference203)
Set constraint188 = constraint194.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference197) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint188.Mode = catCstModeDrivingDimension ' En tercer lugar vamos a acotar los puntos del Intradós por su
distancia al eje vertical '
Dim reference198 As Reference

170
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 171

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference210 =


part1.CreateReferenceFromObject(point2D103)
Dim reference204 As Reference
Dim constraint201 As Constraint
Set reference204 =
part1.CreateReferenceFromObject(point2D97) Set constraint201 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint195 As Constraint reference210)
Set constraint195 =
constraint201.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference204) Dim reference211 As Reference
constraint195.Mode = catCstModeDrivingDimension Set reference211 =
part1.CreateReferenceFromObject(point2D104)
Dim reference205 As Reference
Dim constraint202 As Constraint
Set reference205 =
part1.CreateReferenceFromObject(point2D98) Set constraint202 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint196 As Constraint reference211)
Set constraint196 = constraint202.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference205) Dim reference212 As Reference
constraint196.Mode = catCstModeDrivingDimension Set reference212 =
part1.CreateReferenceFromObject(point2D105)
Dim reference206 As Reference
Dim constraint203 As Constraint
Set reference206 =
part1.CreateReferenceFromObject(point2D99) Set constraint203 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint197 As Constraint reference212)
Set constraint197 = constraint203.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference206) Dim reference213 As Reference
constraint197.Mode = catCstModeDrivingDimension Set reference213 =
part1.CreateReferenceFromObject(point2D106)
Dim reference207 As Reference
Dim constraint204 As Constraint
Set reference207 =
part1.CreateReferenceFromObject(point2D100) Set constraint204 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint198 As Constraint reference213)
Set constraint198 = constraint204.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference207) Dim reference214 As Reference
constraint198.Mode = catCstModeDrivingDimension Set reference214 =
part1.CreateReferenceFromObject(point2D107)
Dim reference208 As Reference
Dim constraint205 As Constraint
Set reference208 =
part1.CreateReferenceFromObject(point2D101) Set constraint205 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint199 As Constraint reference214)
Set constraint199 = constraint205.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference208) Dim reference215 As Reference
constraint199.Mode = catCstModeDrivingDimension Set reference215 =
part1.CreateReferenceFromObject(point2D108)
Dim reference209 As Reference
Dim constraint206 As Constraint
Set reference209 =
part1.CreateReferenceFromObject(point2D102) Set constraint206 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim constraint200 As Constraint reference215)
Set constraint200 = constraint206.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference209) Dim reference216 As Reference
constraint200.Mode = catCstModeDrivingDimension Set reference216 =
part1.CreateReferenceFromObject(point2D109)
Dim reference210 As Reference

171
172
ANEXOS

Dim constraint207 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,


reference222)
Set constraint207 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint213.Mode = catCstModeDrivingDimension
reference216)
Dim reference223 As Reference
constraint207.Mode = catCstModeDrivingDimension
Set reference223 =
Dim reference217 As Reference part1.CreateReferenceFromObject(point2D116)
Set reference217 = Dim constraint214 As Constraint
part1.CreateReferenceFromObject(point2D110)
Set constraint214 =
Dim constraint208 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference223)
Set constraint208 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint214.Mode = catCstModeDrivingDimension
reference217)
Dim reference224 As Reference
constraint208.Mode = catCstModeDrivingDimension
Set reference224 =
Dim reference218 As Reference part1.CreateReferenceFromObject(point2D117)
Set reference218 = Dim constraint215 As Constraint
part1.CreateReferenceFromObject(point2D111)
Set constraint215 =
Dim constraint209 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference224)
Set constraint209 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint215.Mode = catCstModeDrivingDimension
reference218)
Dim reference225 As Reference
constraint209.Mode = catCstModeDrivingDimension
Set reference225 =
Dim reference219 As Reference part1.CreateReferenceFromObject(point2D118)
Set reference219 = Dim constraint216 As Constraint
part1.CreateReferenceFromObject(point2D112)
Set constraint216 =
Dim constraint210 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference225)
Set constraint210 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint216.Mode = catCstModeDrivingDimension
reference219)
Dim reference226 As Reference
constraint210.Mode = catCstModeDrivingDimension
Set reference226 =
Dim reference220 As Reference part1.CreateReferenceFromObject(point2D119)
Set reference220 = Dim constraint217 As Constraint
part1.CreateReferenceFromObject(point2D113)
Set constraint217 =
Dim constraint211 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference226)
Set constraint211 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint217.Mode = catCstModeDrivingDimension
reference220)
Dim reference227 As Reference
constraint211.Mode = catCstModeDrivingDimension
Set reference227 =
Dim reference221 As Reference part1.CreateReferenceFromObject(point2D120)
Set reference221 = Dim constraint218 As Constraint
part1.CreateReferenceFromObject(point2D114)
Set constraint218 =
Dim constraint212 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference227)
Set constraint212 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, constraint218.Mode = catCstModeDrivingDimension
reference221)
Dim reference228 As Reference
constraint212.Mode = catCstModeDrivingDimension
Set reference228 =
Dim reference222 As Reference part1.CreateReferenceFromObject(point2D121)
Set reference222 = Dim constraint219 As Constraint
part1.CreateReferenceFromObject(point2D115)
Set constraint219 =
Dim constraint213 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference142,
reference228)
Set constraint213 =

172
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 173

constraint219.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,


reference234)
Dim reference229 As Reference
constraint225.Mode = catCstModeDrivingDimension
Set reference229 =
part1.CreateReferenceFromObject(point2D122) Dim reference235 As Reference
Dim constraint220 As Constraint Set reference235 =
part1.CreateReferenceFromObject(point2D98)
Set constraint220 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, Dim constraint226 As Constraint
reference229)
Set constraint226 =
constraint220.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference235)
Dim reference230 As Reference
constraint226.Mode = catCstModeDrivingDimension
Set reference230 =
part1.CreateReferenceFromObject(point2D123) Dim reference236 As Reference
Dim constraint221 As Constraint Set reference236 =
part1.CreateReferenceFromObject(point2D99)
Set constraint221 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, Dim constraint227 As Constraint
reference230)
Set constraint227 =
constraint221.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference236)
Dim reference231 As Reference
constraint227.Mode = catCstModeDrivingDimension
Set reference231 =
part1.CreateReferenceFromObject(point2D124) Dim reference237 As Reference
Dim constraint222 As Constraint Set reference237 =
part1.CreateReferenceFromObject(point2D100)
Set constraint222 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, Dim constraint228 As Constraint
reference231)
Set constraint228 =
constraint222.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference237)
Dim reference232 As Reference
constraint228.Mode = catCstModeDrivingDimension
Set reference232 =
part1.CreateReferenceFromObject(point2D125) Dim reference238 As Reference
Dim constraint223 As Constraint Set reference238 =
part1.CreateReferenceFromObject(point2D101)
Set constraint223 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, Dim constraint229 As Constraint
reference232)
Set constraint229 =
constraint223.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference238)
Dim reference233 As Reference
constraint229.Mode = catCstModeDrivingDimension
Set reference233 =
part1.CreateReferenceFromObject(point2D126) Dim reference239 As Reference
Dim constraint224 As Constraint Set reference239 =
part1.CreateReferenceFromObject(point2D102)
Set constraint224 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142, Dim constraint230 As Constraint
reference233)
Set constraint230 =
constraint224.Mode = catCstModeDrivingDimension constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference239)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint230.Mode = catCstModeDrivingDimension
' En último lugar vamos a acotar los puntos del Intradós por su
distancia al eje horizontal ' Dim reference240 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference240 =
part1.CreateReferenceFromObject(point2D103)
Dim reference234 As Reference
Dim constraint231 As Constraint
Set reference234 =
part1.CreateReferenceFromObject(point2D97) Set constraint231 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint225 As Constraint reference240)
Set constraint225 =

173
174
ANEXOS

constraint231.Mode = catCstModeDrivingDimension Set reference247 =


part1.CreateReferenceFromObject(point2D110)
Dim reference241 As Reference
Dim constraint238 As Constraint
Set reference241 =
part1.CreateReferenceFromObject(point2D104) Set constraint238 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint232 As Constraint reference247)
Set constraint232 =
constraint238.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference241) Dim reference248 As Reference
constraint232.Mode = catCstModeDrivingDimension Set reference248 =
part1.CreateReferenceFromObject(point2D111)
Dim reference242 As Reference
Dim constraint239 As Constraint
Set reference242 =
part1.CreateReferenceFromObject(point2D105) Set constraint239 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint233 As Constraint reference248)
Set constraint233 = constraint239.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference242) Dim reference249 As Reference
constraint233.Mode = catCstModeDrivingDimension Set reference249 =
part1.CreateReferenceFromObject(point2D112)
Dim reference243 As Reference
Dim constraint240 As Constraint
Set reference243 =
part1.CreateReferenceFromObject(point2D106) Set constraint240 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint234 As Constraint reference249)
Set constraint234 = constraint240.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference243) Dim reference250 As Reference
constraint234.Mode = catCstModeDrivingDimension Set reference250 =
part1.CreateReferenceFromObject(point2D113)
Dim reference244 As Reference
Dim constraint241 As Constraint
Set reference244 =
part1.CreateReferenceFromObject(point2D107) Set constraint241 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint235 As Constraint reference250)
Set constraint235 = constraint241.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference244) Dim reference251 As Reference
constraint235.Mode = catCstModeDrivingDimension Set reference251 =
part1.CreateReferenceFromObject(point2D114)
Dim reference245 As Reference
Dim constraint242 As Constraint
Set reference245 =
part1.CreateReferenceFromObject(point2D108) Set constraint242 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint236 As Constraint reference251)
Set constraint236 = constraint242.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference245) Dim reference252 As Reference
constraint236.Mode = catCstModeDrivingDimension Set reference252 =
part1.CreateReferenceFromObject(point2D115)
Dim reference246 As Reference
Dim constraint243 As Constraint
Set reference246 =
part1.CreateReferenceFromObject(point2D109) Set constraint243 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint237 As Constraint reference252)
Set constraint237 = constraint243.Mode = catCstModeDrivingDimension
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference246) Dim reference253 As Reference
constraint237.Mode = catCstModeDrivingDimension Set reference253 =
part1.CreateReferenceFromObject(point2D116)
Dim reference247 As Reference

174
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 175

Dim constraint244 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,


reference259)
Set constraint244 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint250.Mode = catCstModeDrivingDimension
reference253)
Dim reference260 As Reference
constraint244.Mode = catCstModeDrivingDimension
Set reference260 =
Dim reference254 As Reference part1.CreateReferenceFromObject(point2D123)
Set reference254 = Dim constraint251 As Constraint
part1.CreateReferenceFromObject(point2D117)
Set constraint251 =
Dim constraint245 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference260)
Set constraint245 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint251.Mode = catCstModeDrivingDimension
reference254)
Dim reference261 As Reference
constraint245.Mode = catCstModeDrivingDimension
Set reference261 =
Dim reference255 As Reference part1.CreateReferenceFromObject(point2D124)
Set reference255 = Dim constraint252 As Constraint
part1.CreateReferenceFromObject(point2D118)
Set constraint252 =
Dim constraint246 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference261)
Set constraint246 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint252.Mode = catCstModeDrivingDimension
reference255)
Dim reference262 As Reference
constraint246.Mode = catCstModeDrivingDimension
Set reference262 =
Dim reference256 As Reference part1.CreateReferenceFromObject(point2D125)
Set reference256 = Dim constraint253 As Constraint
part1.CreateReferenceFromObject(point2D119)
Set constraint253 =
Dim constraint247 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference262)
Set constraint247 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint253.Mode = catCstModeDrivingDimension
reference256)
Dim reference263 As Reference
constraint247.Mode = catCstModeDrivingDimension
Set reference263 =
Dim reference257 As Reference part1.CreateReferenceFromObject(point2D126)
Set reference257 = Dim constraint254 As Constraint
part1.CreateReferenceFromObject(point2D120)
Set constraint254 =
Dim constraint248 As Constraint constraints2.AddBiEltCst(catCstTypeDistance, reference143,
reference263)
Set constraint248 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, constraint254.Mode = catCstModeDrivingDimension
reference257)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
constraint248.Mode = catCstModeDrivingDimension
' Acotamos el control point del borde de ataque en el cual
Dim reference258 As Reference creamos una fórmula para que este varie al variar el perfil '
Set reference258 = '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.CreateReferenceFromObject(point2D121)
Dim reference264 As Reference
Dim constraint249 As Constraint
Set reference264 =
Set constraint249 = part1.CreateReferenceFromObject(point2D127)
constraints2.AddBiEltCst(catCstTypeDistance, reference143,
Dim constraint255 As Constraint
reference258)
constraint249.Mode = catCstModeDrivingDimension Set constraint255 =
constraints2.AddBiEltCst(catCstTypeDistance, reference142,
Dim reference259 As Reference reference264)
Set reference259 = constraint255.Mode = catCstModeDrivingDimension
part1.CreateReferenceFromObject(point2D122)
Dim length255 As Length
Dim constraint250 As Constraint
Set length255 = constraint255.Dimension
Set constraint250 =
length255.Value = 0

175
176
ANEXOS

Dim reference265 As Reference Set arrayOfObject3(23) = point2D73


Set reference265 = Set arrayOfObject3(24) = point2D72
part1.CreateReferenceFromObject(point2D127)
Set arrayOfObject3(25) = point2D71
Dim constraint256 As Constraint
Set arrayOfObject3(26) = point2D70
Set constraint256 =
constraints2.AddBiEltCst(catCstTypeDistance, reference143, Set arrayOfObject3(27) = point2D69
reference265) Set arrayOfObject3(28) = point2D68
constraint256.Mode = catCstModeDrivingDimension Set arrayOfObject3(29) = point2D67
Dim length256 As Length Set arrayOfObject3(30) = point2D127
Set length256 = constraint256.Dimension Set arrayOfObject3(31) = point2D97
Dim formula11 As Formula Set arrayOfObject3(32) = point2D98
Set formula11 = relations.CreateFormula("Punto control borde Set arrayOfObject3(33) = point2D99
de ataque raiz", "Borde de ataque", length256,
"Semienvergadura*tan(Diedro) + Semienvergadura") Set arrayOfObject3(34) = point2D100

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set arrayOfObject3(35) = point2D101

' Una vez creado todos los puntos del perfil, realizamos un Set arrayOfObject3(36) = point2D102
spline alrededor de todos los puntos. ' Set arrayOfObject3(37) = point2D103
' En dicho spline hemos unido todos los puntos exceptuando Set arrayOfObject3(38) = point2D104
los situados en el borde de salida. Ya que si unimos '
Set arrayOfObject3(39) = point2D105
' estos dos puntos en el mismo spline este se distorsiona.
' Set arrayOfObject3(40) = point2D106
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set arrayOfObject3(41) = point2D107
Dim arrayOfObject3(60) Set arrayOfObject3(42) = point2D108
Set arrayOfObject3(0) = point2D96 Set arrayOfObject3(43) = point2D109
Set arrayOfObject3(1) = point2D95 Set arrayOfObject3(44) = point2D110
Set arrayOfObject3(2) = point2D94 Set arrayOfObject3(45) = point2D111
Set arrayOfObject3(3) = point2D93 Set arrayOfObject3(46) = point2D112
Set arrayOfObject3(4) = point2D92 Set arrayOfObject3(47) = point2D113
Set arrayOfObject3(5) = point2D91 Set arrayOfObject3(48) = point2D114
Set arrayOfObject3(6) = point2D90 Set arrayOfObject3(49) = point2D115
Set arrayOfObject3(7) = point2D89 Set arrayOfObject3(50) = point2D116
Set arrayOfObject3(8) = point2D88 Set arrayOfObject3(51) = point2D117
Set arrayOfObject3(9) = point2D87 Set arrayOfObject3(52) = point2D118
Set arrayOfObject3(10) = point2D86 Set arrayOfObject3(53) = point2D119
Set arrayOfObject3(11) = point2D85 Set arrayOfObject3(54) = point2D120
Set arrayOfObject3(12) = point2D84 Set arrayOfObject3(55) = point2D121
Set arrayOfObject3(13) = point2D83 Set arrayOfObject3(56) = point2D122
Set arrayOfObject3(14) = point2D82 Set arrayOfObject3(57) = point2D123
Set arrayOfObject3(15) = point2D81 Set arrayOfObject3(58) = point2D124
Set arrayOfObject3(16) = point2D80 Set arrayOfObject3(59) = point2D125
Set arrayOfObject3(17) = point2D79 Set arrayOfObject3(60) = point2D126
Set arrayOfObject3(18) = point2D78 Dim spline2D3 As Spline2D
Set arrayOfObject3(19) = point2D77 Set factory2D2temp = factory2D2
Set arrayOfObject3(20) = point2D76 Set spline2D3 =
factory2D2temp.CreateSpline(arrayOfObject3)
Set arrayOfObject3(21) = point2D75
spline2D1.ReportName = 141
Set arrayOfObject3(22) = point2D74

176
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 177

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' "if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-


Estrechamiento)/100)*Cuerda*(NACA2T/10))
' Unimos los dos puntos del borde de salida mediante otro
PartBody\Sketch.2\Offset.165\Offset =
spline el cual creará una linea recta entre estos dos puntos ' (Semienvergadura*tan(Diedro))+(Semienvergadura
' aunque lo ideal seria unirlo mediante un arco de +((NACA1T/100)*(20/1000*((100-
circunferencia el cual aun no sabemos hacer. ' Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
20/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
Dim arrayOfObject4(1) 0.1260*(20/1000)-
0.3516*(20/1000)**2+0.2843*(20/1000)**3-
Set arrayOfObject4(0) = point2D96 0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
T/10)**2)*((NACA2T/10)-(20/1000))))) else
Set arrayOfObject4(1) = point2D126
PartBody\Sketch.2\Offset.165\Offset =
Dim spline2D4 As Spline2D (Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Set factory2D2temp = factory2D2 20/1000*((100-Estrechamiento)/100)*Cuerda)*(-
Set spline2D4 = 2*(NACA2T/10)+20/1000+1)/(1-
factory2D2temp.CreateSpline(arrayOfObject4) NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
spline2D1.ReportName = 142 0.1260*(20/1000)-
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
' Cerramos el sketch (NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))"
sketch2.CloseEdition Dim rule62 As Rule
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set rule62 = relations.CreateProgram("rule62", "", "")
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' rule62.Modify "/*Rule created by Francisco Javier Jiménez
Calvo*/" & vbCrLf & _
'' Creamos las Regla a través de las cuales tendremos
parametrizados nuestro perfil en la raiz. '' "if (40/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
'' Vamos a crear una regla para cada punto del perfil.
PartBody\Sketch.2\Offset.136\Offset = (40/1000*((100 -
''
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
'' Posteriormente modificamos la Regla e introducimos las Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)-
lineas de códigos obtenidas con MATLAB. '' 0.1260*(40/1000)-
0.3516*(40/1000)**2+0.2843*(40/1000)**3-
'' Al ser lineas de códigos muy largas, estas no caben en una 0.1015*(40/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2
sola linea, por lo cual habrá que poner al final de cada linea '' T/10)**2)*((NACA2T/10)-(40/1000))))) else
'' " & _ para poder continuar debajo y cuando queramos que PartBody\Sketch.2\Offset.136\Offset = (40/1000*((100-
cambie de linea & vbCrLf & (para cambiar de linea dentro del Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
mismo) '' Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)-
0.1260*(40/1000)-
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.1015*(40/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
(NACA2T/10))**2)*((NACA2T/10)-(40/1000)))))" & vbCrLf
Dim rule61 As Rule &_
Set rule61 = relations.CreateProgram("rule61", "", "") "if (40/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule61.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.166\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura
"if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(40/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.135\Offset = (20/1000*((100 - 40/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)- 0.1260*(40/1000)-
0.1260*(20/1000)- 0.3516*(40/1000)**2+0.2843*(40/1000)**3-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- 0.1015*(40/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2 T/10)**2)*((NACA2T/10)-(40/1000))))) else
T/10)**2)*((NACA2T/10)-(20/1000))))) else PartBody\Sketch.2\Offset.166\Offset =
PartBody\Sketch.2\Offset.135\Offset = (20/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)- 40/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(20/1000)- 2*(NACA2T/10)+40/1000+1)/(1-
0.3516*(20/1000)**2+0.2843*(20/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))" & vbCrLf 0.1260*(40/1000)-
&_ 0.3516*(40/1000)**2+0.2843*(40/1000)**3-

177
178
ANEXOS

0.1015*(40/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(80/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(40/1000)))))" 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule63 As Rule (NACA2T/10))**2)*((NACA2T/10)-(80/1000)))))" & vbCrLf
Set rule63 = relations.CreateProgram("rule63", "", "") &_

rule63.Modify "/*Rule created by Francisco Javier Jiménez "if (80/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.168\Offset =
"if (60/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(80/1000*((100-
PartBody\Sketch.2\Offset.137\Offset = (60/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 80/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)-
0.1260*(60/1000)- 0.1260*(80/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2 0.1015*(80/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
T/10)**2)*((NACA2T/10)-(60/1000))))) else T/10)**2)*((NACA2T/10)-(80/1000))))) else
PartBody\Sketch.2\Offset.137\Offset = (60/1000*((100- PartBody\Sketch.2\Offset.168\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(60/1000)- 80/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- 2*(NACA2T/10)+80/1000+1)/(1-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(60/1000)))))" & vbCrLf Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)-
&_ 0.1260*(80/1000)-
"if (60/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 0.1015*(80/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
PartBody\Sketch.2\Offset.167\Offset = (NACA2T/10))**2)*((NACA2T/10)-(80/1000)))))"
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule65 As Rule
+((NACA1T/100)*(60/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule65 = relations.CreateProgram("rule65", "", "")
60/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule65.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)- Calvo*/" & vbCrLf & _
0.1260*(60/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- "if (100/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(60/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2 Estrechamiento)/100)*Cuerda*(NACA2T/10))
T/10)**2)*((NACA2T/10)-(60/1000))))) else PartBody\Sketch.2\Offset.139\Offset = (100/1000*((100 -
PartBody\Sketch.2\Offset.167\Offset = Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(100/1000)-
60/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
2*(NACA2T/10)+60/1000+1)/(1- 0.1015*(100/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(100/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)- PartBody\Sketch.2\Offset.139\Offset = (100/1000*((100-
0.1260*(60/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)-
0.1015*(60/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(100/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(60/1000)))))" 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
0.1015*(100/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule64 As Rule
(NACA2T/10))**2)*((NACA2T/10)-(100/1000)))))" &
Set rule64 = relations.CreateProgram("rule64", "", "") vbCrLf & _

rule64.Modify "/*Rule created by Francisco Javier Jiménez "if (100/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.169\Offset =
"if (80/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(100/1000*((100-
PartBody\Sketch.2\Offset.138\Offset = (80/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 100/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)-
0.1260*(80/1000)- 0.1260*(100/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- 0.3516*(100/1000)**2+0.2843*(100/1000)**3-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2 0.1015*(100/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
T/10)**2)*((NACA2T/10)-(80/1000))))) else 2T/10)**2)*((NACA2T/10)-(100/1000))))) else
PartBody\Sketch.2\Offset.138\Offset = (80/1000*((100- PartBody\Sketch.2\Offset.169\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-

178
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 179

100/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(172/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+100/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(172/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.141\Offset = (172/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(100/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.1260*(172/1000)-
0.1015*(100/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(100/1000)))))" 0.1015*(172/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(172/1000)))))" &
Dim rule66 As Rule vbCrLf & _
Set rule66 = relations.CreateProgram("rule66", "", "") "if (172/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule66.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.171\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura
"if (136/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(172/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.140\Offset = (136/1000*((100 - 172/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)- 0.1260*(172/1000)-
0.1260*(136/1000)- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- 0.1015*(172/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(136/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(172/1000))))) else
2T/10)**2)*((NACA2T/10)-(136/1000))))) else PartBody\Sketch.2\Offset.171\Offset =
PartBody\Sketch.2\Offset.140\Offset = (136/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)- 172/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(136/1000)- 2*(NACA2T/10)+172/1000+1)/(1-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(136/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(136/1000)))))" & 0.1260*(172/1000)-
vbCrLf & _ 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
"if (136/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(172/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(172/1000)))))"
PartBody\Sketch.2\Offset.170\Offset = Dim rule68 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(136/1000*((100- Set rule68 = relations.CreateProgram("rule68", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule68.Modify "/*Rule created by Francisco Javier Jiménez
136/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)-
0.1260*(136/1000)- "if (208/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(136/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.142\Offset = (208/1000*((100 -
2T/10)**2)*((NACA2T/10)-(136/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.170\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(208/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
136/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(208/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+136/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(208/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.142\Offset = (208/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(136/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)-
0.3516*(136/1000)**2+0.2843*(136/1000)**3- 0.1260*(208/1000)-
0.1015*(136/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(136/1000)))))" 0.1015*(208/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(208/1000)))))" &
Dim rule67 As Rule vbCrLf & _
Set rule67 = relations.CreateProgram("rule67", "", "") "if (208/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule67.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.172\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura
"if (172/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(208/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.141\Offset = (172/1000*((100 - 208/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)- 0.1260*(208/1000)-
0.1260*(172/1000)- 0.3516*(208/1000)**2+0.2843*(208/1000)**3-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- 0.1015*(208/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA

179
180
ANEXOS

2T/10)**2)*((NACA2T/10)-(208/1000))))) else PartBody\Sketch.2\Offset.144\Offset = (280/1000*((100 -


PartBody\Sketch.2\Offset.172\Offset = Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(280/1000)-
208/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
2*(NACA2T/10)+208/1000+1)/(1- 0.1015*(280/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(280/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)- PartBody\Sketch.2\Offset.144\Offset = (280/1000*((100-
0.1260*(208/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
0.1015*(208/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(280/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(208/1000)))))" 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(280/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule69 As Rule (NACA2T/10))**2)*((NACA2T/10)-(280/1000)))))" &
Set rule69 = relations.CreateProgram("rule69", "", "") vbCrLf & _

rule69.Modify "/*Rule created by Francisco Javier Jiménez "if (280/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.174\Offset =
"if (244/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(280/1000*((100-
PartBody\Sketch.2\Offset.143\Offset = (244/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 280/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
0.1260*(244/1000)- 0.1260*(280/1000)-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(244/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(280/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(244/1000))))) else 2T/10)**2)*((NACA2T/10)-(280/1000))))) else
PartBody\Sketch.2\Offset.143\Offset = (244/1000*((100- PartBody\Sketch.2\Offset.174\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(244/1000)- 280/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- 2*(NACA2T/10)+280/1000+1)/(1-
0.1015*(244/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(244/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
vbCrLf & _ 0.1260*(280/1000)-
"if (244/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 0.1015*(280/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
PartBody\Sketch.2\Offset.173\Offset = (NACA2T/10))**2)*((NACA2T/10)-(280/1000)))))"
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule71 As Rule
+((NACA1T/100)*(244/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule71 = relations.CreateProgram("rule71", "", "")
244/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule71.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)- Calvo*/" & vbCrLf & _
0.1260*(244/1000)-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- "if (316/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(244/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(244/1000))))) else PartBody\Sketch.2\Offset.145\Offset = (316/1000*((100 -
PartBody\Sketch.2\Offset.173\Offset = Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(316/1000)-
244/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(316/1000)**2+0.2843*(316/1000)**3-
2*(NACA2T/10)+244/1000+1)/(1- 0.1015*(316/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(316/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)- PartBody\Sketch.2\Offset.145\Offset = (316/1000*((100-
0.1260*(244/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.3516*(244/1000)**2+0.2843*(244/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)-
0.1015*(244/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(316/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(244/1000)))))" 0.3516*(316/1000)**2+0.2843*(316/1000)**3-
0.1015*(316/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule70 As Rule (NACA2T/10))**2)*((NACA2T/10)-(316/1000)))))" &
Set rule70 = relations.CreateProgram("rule70", "", "") vbCrLf & _

rule70.Modify "/*Rule created by Francisco Javier Jiménez "if (316/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.175\Offset =
"if (280/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(316/1000*((100-

180
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 181

Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule73.Modify "/*Rule created by Francisco Javier Jiménez


316/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- "if (388/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(316/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.147\Offset = (388/1000*((100 -
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
2T/10)**2)*((NACA2T/10)-(316/1000))))) else
PartBody\Sketch.2\Offset.175\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(388/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(388/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
316/1000*((100-Estrechamiento)/100)*Cuerda)*(-
2*(NACA2T/10)+316/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(388/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.147\Offset = (388/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
0.1260*(316/1000)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- 0.1260*(388/1000)-
0.1015*(316/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(316/1000)))))" 0.1015*(388/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(388/1000)))))" &
Dim rule72 As Rule vbCrLf & _
Set rule72 = relations.CreateProgram("rule72", "", "") "if (388/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule72.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.177\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura
"if (352/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(388/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.146\Offset = (352/1000*((100 - 388/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)- 0.1260*(388/1000)-
0.1260*(352/1000)- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- 0.1015*(388/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(352/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(388/1000))))) else
2T/10)**2)*((NACA2T/10)-(352/1000))))) else PartBody\Sketch.2\Offset.177\Offset =
PartBody\Sketch.2\Offset.146\Offset = (352/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)- 388/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(352/1000)- 2*(NACA2T/10)+388/1000+1)/(1-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(352/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(352/1000)))))" & 0.1260*(388/1000)-
vbCrLf & _ 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
0.1015*(388/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (352/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(388/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.176\Offset = Dim rule74 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura Set rule74 = relations.CreateProgram("rule60", "", "")
+((NACA1T/100)*(352/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule74.Modify "/*Rule created by Francisco Javier Jiménez
352/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)-
"if (424/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1260*(352/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(352/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.148\Offset = (424/1000*((100 -
2T/10)**2)*((NACA2T/10)-(352/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)-
PartBody\Sketch.2\Offset.176\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(424/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
352/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(424/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(424/1000))))) else
2*(NACA2T/10)+352/1000+1)/(1-
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.148\Offset = (424/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(352/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)-
0.3516*(352/1000)**2+0.2843*(352/1000)**3- 0.1260*(424/1000)-
0.1015*(352/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(424/1000)**2+0.2843*(424/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(352/1000)))))" 0.1015*(424/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(424/1000)))))" &
Dim rule73 As Rule vbCrLf & _
Set rule73 = relations.CreateProgram("rule73", "", "") "if (424/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-

181
182
ANEXOS

Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(460/1000)))))"
PartBody\Sketch.2\Offset.178\Offset =
Dim rule76 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(424/1000*((100- Set rule76 = relations.CreateProgram("rule76", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
424/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule76.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- Calvo*/" & vbCrLf & _
0.1260*(424/1000)- "if (496/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(424/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.150\Offset = (496/1000*((100 -
2T/10)**2)*((NACA2T/10)-(424/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.178\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(496/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
424/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(496/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+424/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(496/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.150\Offset = (496/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(424/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- 0.1260*(496/1000)-
0.1015*(424/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(424/1000)))))" 0.1015*(496/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule75 As Rule (NACA2T/10))**2)*((NACA2T/10)-(496/1000)))))" &
vbCrLf & _
Set rule75 = relations.CreateProgram("rule60", "", "")
"if (496/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule75.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.180\Offset =
"if (460/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(496/1000*((100-
PartBody\Sketch.2\Offset.149\Offset = (460/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 496/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(460/1000)- 0.1260*(496/1000)-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(496/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(460/1000))))) else 2T/10)**2)*((NACA2T/10)-(496/1000))))) else
PartBody\Sketch.2\Offset.149\Offset = (460/1000*((100- PartBody\Sketch.2\Offset.180\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(460/1000)- 496/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- 2*(NACA2T/10)+496/1000+1)/(1-
0.1015*(460/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(460/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
vbCrLf & _ 0.1260*(496/1000)-
0.3516*(496/1000)**2+0.2843*(496/1000)**3-
"if (460/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(496/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(496/1000)))))"
PartBody\Sketch.2\Offset.179\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule77 As Rule
+((NACA1T/100)*(460/1000*((100- Set rule77 = relations.CreateProgram("rule77", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
460/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule77.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)- Calvo*/" & vbCrLf & _
0.1260*(460/1000)- "if (532/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(460/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.151\Offset = (532/1000*((100 -
2T/10)**2)*((NACA2T/10)-(460/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.179\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(532/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
460/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(532/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+460/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(532/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.151\Offset = (532/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(460/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)-
0.3516*(460/1000)**2+0.2843*(460/1000)**3- 0.1260*(532/1000)-
0.1015*(460/1000)**4)*cos(atan(2*(NACA1T/100)/((1-

182
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 183

0.3516*(532/1000)**2+0.2843*(532/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(532/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(532/1000)))))" & 0.1260*(568/1000)-
vbCrLf & _ 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
0.1015*(568/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (532/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(568/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.181\Offset = Dim rule79 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(532/1000*((100- Set rule79 = relations.CreateProgram("rule79", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule79.Modify "/*Rule created by Francisco Javier Jiménez
532/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)-
0.1260*(532/1000)- "if (604/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(532/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.153\Offset = (604/1000*((100 -
2T/10)**2)*((NACA2T/10)-(532/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.181\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(604/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
532/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(604/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+532/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(604/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.153\Offset = (604/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(532/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- 0.1260*(604/1000)-
0.1015*(532/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(532/1000)))))" 0.1015*(604/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(604/1000)))))" &
Dim rule78 As Rule vbCrLf & _
Set rule78 = relations.CreateProgram("rule78", "", "") "if (604/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule78.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.183\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura
"if (568/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(604/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.152\Offset = (568/1000*((100 - 604/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)- 0.1260*(604/1000)-
0.1260*(568/1000)- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- 0.1015*(604/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(568/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(604/1000))))) else
2T/10)**2)*((NACA2T/10)-(568/1000))))) else PartBody\Sketch.2\Offset.183\Offset =
PartBody\Sketch.2\Offset.152\Offset = (568/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)- 604/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(568/1000)- 2*(NACA2T/10)+604/1000+1)/(1-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(568/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(568/1000)))))" & 0.1260*(604/1000)-
vbCrLf & _ 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
0.1015*(604/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (568/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(604/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.182\Offset = Dim rule80 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(568/1000*((100- Set rule80 = relations.CreateProgram("rule80", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule80.Modify "/*Rule created by Francisco Javier Jiménez
568/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
0.1260*(568/1000)- "if (640/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(568/1000)**2+0.2843*(568/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(568/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.154\Offset = (640/1000*((100 -
2T/10)**2)*((NACA2T/10)-(568/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.182\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(640/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(640/1000)**2+0.2843*(640/1000)**3-
568/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(640/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+568/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(640/1000))))) else

183
184
ANEXOS

PartBody\Sketch.2\Offset.154\Offset = (640/1000*((100- PartBody\Sketch.2\Offset.185\Offset =


Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(640/1000)- 676/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- 2*(NACA2T/10)+676/1000+1)/(1-
0.1015*(640/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(640/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)-
vbCrLf & _ 0.1260*(676/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
"if (640/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(676/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
(NACA2T/10))**2)*((NACA2T/10)-(676/1000)))))"
PartBody\Sketch.2\Offset.184\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule82 As Rule
+((NACA1T/100)*(640/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule82 = relations.CreateProgram("rule82", "", "")
640/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule82.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- Calvo*/" & vbCrLf & _
0.1260*(640/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- "if (712/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(640/1000))))) else PartBody\Sketch.2\Offset.156\Offset = (712/1000*((100 -
PartBody\Sketch.2\Offset.184\Offset = Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)-
1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(712/1000)-
640/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
2*(NACA2T/10)+640/1000+1)/(1- 0.1015*(712/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(712/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- PartBody\Sketch.2\Offset.156\Offset = (712/1000*((100-
0.1260*(640/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(712/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(640/1000)))))" 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule81 As Rule (NACA2T/10))**2)*((NACA2T/10)-(712/1000)))))" &
Set rule81 = relations.CreateProgram("rule81", "", "") vbCrLf & _

rule81.Modify "/*Rule created by Francisco Javier Jiménez "if (712/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.186\Offset =
"if (676/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(712/1000*((100-
PartBody\Sketch.2\Offset.155\Offset = (676/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 712/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(676/1000)- 0.1260*(712/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- 0.3516*(712/1000)**2+0.2843*(712/1000)**3-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(712/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(676/1000))))) else 2T/10)**2)*((NACA2T/10)-(712/1000))))) else
PartBody\Sketch.2\Offset.155\Offset = (676/1000*((100- PartBody\Sketch.2\Offset.186\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(676/1000)- 712/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- 2*(NACA2T/10)+712/1000+1)/(1-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(676/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)-
vbCrLf & _ 0.1260*(712/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3-
"if (676/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(712/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(712/1000)))))"
PartBody\Sketch.2\Offset.185\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule83 As Rule
+((NACA1T/100)*(676/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule83 = relations.CreateProgram("rule83", "", "")
676/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule83.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)- Calvo*/" & vbCrLf & _
0.1260*(676/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3- "if (748/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(676/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(676/1000))))) else PartBody\Sketch.2\Offset.157\Offset = (748/1000*((100 -

184
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 185

Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-


Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)- 0.1260*(784/1000)-
0.1260*(748/1000)- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- 0.1015*(784/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(748/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(784/1000))))) else
2T/10)**2)*((NACA2T/10)-(748/1000))))) else PartBody\Sketch.2\Offset.188\Offset =
PartBody\Sketch.2\Offset.157\Offset = (748/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)- 784/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(748/1000)- 2*(NACA2T/10)+784/1000+1)/(1-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(748/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(748/1000)))))" & 0.1260*(784/1000)-
vbCrLf & _ 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (748/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(784/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.187\Offset = Dim rule85 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(748/1000*((100- Set rule85 = relations.CreateProgram("rule85", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule85.Modify "/*Rule created by Francisco Javier Jiménez
748/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)-
0.1260*(748/1000)- "if (820/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(748/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.159\Offset = (820/1000*((100 -
2T/10)**2)*((NACA2T/10)-(748/1000))))) else Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
PartBody\Sketch.2\Offset.187\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(820/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
748/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(820/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+748/1000+1)/(1- 2T/10)**2)*((NACA2T/10)-(820/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.159\Offset = (820/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.1260*(748/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- 0.1260*(820/1000)-
0.1015*(748/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(748/1000)))))" 0.1015*(820/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(820/1000)))))" &
Dim rule84 As Rule vbCrLf & _
Set rule84 = relations.CreateProgram("rule84", "", "") "if (820/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule84.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.189\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura
"if (784/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(820/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.158\Offset = (784/1000*((100 - 820/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)- 0.1260*(820/1000)-
0.1260*(784/1000)- 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- 0.1015*(820/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(784/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(820/1000))))) else
2T/10)**2)*((NACA2T/10)-(784/1000))))) else PartBody\Sketch.2\Offset.189\Offset =
PartBody\Sketch.2\Offset.158\Offset = (784/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)- 820/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(784/1000)- 2*(NACA2T/10)+820/1000+1)/(1-
0.3516*(784/1000)**2+0.2843*(784/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(784/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(784/1000)))))" & 0.1260*(820/1000)-
vbCrLf & _ 0.3516*(820/1000)**2+0.2843*(820/1000)**3-
0.1015*(820/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (784/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(820/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.188\Offset = Dim rule86 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura
+((NACA1T/100)*(784/1000*((100- Set rule86 = relations.CreateProgram("rule86", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule86.Modify "/*Rule created by Francisco Javier Jiménez
784/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _

185
186
ANEXOS

"if (856/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura


Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(892/1000*((100-
PartBody\Sketch.2\Offset.160\Offset = (856/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 892/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
0.1260*(856/1000)- 0.1260*(892/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.1015*(856/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(892/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(856/1000))))) else 2T/10)**2)*((NACA2T/10)-(892/1000))))) else
PartBody\Sketch.2\Offset.160\Offset = (856/1000*((100- PartBody\Sketch.2\Offset.191\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(856/1000)- 892/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 2*(NACA2T/10)+892/1000+1)/(1-
0.1015*(856/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(856/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
vbCrLf & _ 0.1260*(892/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3-
"if (856/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(892/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(892/1000)))))"
PartBody\Sketch.2\Offset.190\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura Dim rule88 As Rule
+((NACA1T/100)*(856/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule88 = relations.CreateProgram("rule88", "", "")
856/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- rule88.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- Calvo*/" & vbCrLf & _
0.1260*(856/1000)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- "if (928/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(856/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(856/1000))))) else PartBody\Sketch.2\Offset.162\Offset = (928/1000*((100 -
PartBody\Sketch.2\Offset.190\Offset = Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 -
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(928/1000)-
856/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
2*(NACA2T/10)+856/1000+1)/(1- 0.1015*(928/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(928/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- PartBody\Sketch.2\Offset.162\Offset = (928/1000*((100-
0.1260*(856/1000)- Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)-
0.1015*(856/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(928/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(856/1000)))))" 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.1015*(928/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule87 As Rule (NACA2T/10))**2)*((NACA2T/10)-(928/1000)))))" &
Set rule87 = relations.CreateProgram("rule87", "", "") vbCrLf & _

rule87.Modify "/*Rule created by Francisco Javier Jiménez "if (928/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.192\Offset =
"if (892/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(NACA2T/10)) +((NACA1T/100)*(928/1000*((100-
PartBody\Sketch.2\Offset.161\Offset = (892/1000*((100 - Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - 928/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)-
0.1260*(892/1000)- 0.1260*(928/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3- 0.3516*(928/1000)**2+0.2843*(928/1000)**3-
0.1015*(892/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(928/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(892/1000))))) else 2T/10)**2)*((NACA2T/10)-(928/1000))))) else
PartBody\Sketch.2\Offset.161\Offset = (892/1000*((100- PartBody\Sketch.2\Offset.192\Offset =
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(892/1000)- 928/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(892/1000)**2+0.2843*(892/1000)**3- 2*(NACA2T/10)+928/1000+1)/(1-
0.1015*(892/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(892/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)-
vbCrLf & _ 0.1260*(928/1000)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3-
"if (892/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(928/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(928/1000)))))"
PartBody\Sketch.2\Offset.191\Offset =

186
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 187

Dim rule89 As Rule vbCrLf & _


Set rule89 = relations.CreateProgram("rule89", "", "") "if (1000/1000*((100-Estrechamiento)/100)*Cuerda) <=
(((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule89.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.194\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura
"if (964/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- +((NACA1T/100)*(1000/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.163\Offset = (964/1000*((100 - 1000/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)- 0.1260*(1000/1000)-
0.1260*(964/1000)- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1015*(1000/1000)**4)*cos(atan(2*(NACA1T/100)/((NAC
0.1015*(964/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA A2T/10)**2)*((NACA2T/10)-(1000/1000))))) else
2T/10)**2)*((NACA2T/10)-(964/1000))))) else PartBody\Sketch.2\Offset.194\Offset =
PartBody\Sketch.2\Offset.163\Offset = (964/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)- 1000/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(964/1000)- 2*(NACA2T/10)+1000/1000+1)/(1-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- NACA2T/10)**2)+NACA34T/(100*0.2)*((100-
0.1015*(964/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(964/1000)))))" & 0.1260*(1000/1000)-
vbCrLf & _ 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.1015*(1000/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (964/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(1000/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.193\Offset = Dim rule91 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura Set rule91 = relations.CreateProgram("rule91", "", "")
+((NACA1T/100)*(964/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule91.Modify "/*Rule created by Francisco Javier Jiménez
964/1000)/(NACA2T/10)**2)+NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)-
0.1260*(964/1000)- "if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(964/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.195\Offset = (20/1000*((100-
2T/10)**2)*((NACA2T/10)-(964/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.193\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(20/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
964/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2
2*(NACA2T/10)+964/1000+1)/(1- T/10)**2)*((NACA2T/10)-(20/1000))))) else
NACA2T/10)**2)+NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.195\Offset = (20/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(964/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1260*(20/1000)-
0.1015*(964/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(964/1000)))))" 0.1015*(20/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))" & vbCrLf
Dim rule90 As Rule &_
Set rule90 = relations.CreateProgram("rule90", "", "") "if (20/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule90.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.225\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (1000/1000*((100-Estrechamiento)/100)*Cuerda) <= 1T/100)*(20/1000*((100-
(((100-Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.164\Offset = (1000/1000*((100 - 20/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100 - Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)- 0.1260*(20/1000)-
0.1260*(1000/1000)- 0.3516*(20/1000)**2+0.2843*(20/1000)**3-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- 0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1T/100)/((NAC T/10)**2)*((NACA2T/10)-(20/1000))))) else
A2T/10)**2)*((NACA2T/10)-(1000/1000))))) else PartBody\Sketch.2\Offset.225\Offset =
PartBody\Sketch.2\Offset.164\Offset =(1000/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda - NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)- 20/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(1000/1000)- 2*(NACA2T/10)+20/1000+1)/(1-NACA2T/10)**2)-
0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(1000/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(20/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(1000/1000)))))" & 0.1260*(20/1000)-

187
188
ANEXOS

0.3516*(20/1000)**2+0.2843*(20/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)-
0.1015*(20/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(60/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(20/1000)))))" 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule92 As Rule (NACA2T/10))**2)*((NACA2T/10)-(60/1000)))))" & vbCrLf
Set rule92 = relations.CreateProgram("rule92", "", "") &_

rule92.Modify "/*Rule created by Francisco Javier Jiménez "if (60/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.227\Offset =
"if (40/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 1T/100)*(60/1000*((100-
PartBody\Sketch.2\Offset.196\Offset = (40/1000*((100- Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- 60/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)-
0.1260*(40/1000)- 0.1260*(60/1000)-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
0.1015*(40/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2 0.1015*(60/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
T/10)**2)*((NACA2T/10)-(40/1000))))) else T/10)**2)*((NACA2T/10)-(60/1000))))) else
PartBody\Sketch.2\Offset.196\Offset = (40/1000*((100- PartBody\Sketch.2\Offset.227\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(40/1000)- 60/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- 2*(NACA2T/10)+60/1000+1)/(1-NACA2T/10)**2)-
0.1015*(40/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(40/1000)))))" & vbCrLf Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)-
&_ 0.1260*(60/1000)-
"if (40/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.3516*(60/1000)**2+0.2843*(60/1000)**3-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 0.1015*(60/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
PartBody\Sketch.2\Offset.226\Offset = (NACA2T/10))**2)*((NACA2T/10)-(60/1000)))))"
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Dim rule94 As Rule
1T/100)*(40/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule94 = relations.CreateProgram("rule94", "", "")
40/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule94.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)- Calvo*/" & vbCrLf & _
0.1260*(40/1000)-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- "if (80/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2 Estrechamiento)/100)*Cuerda*(NACA2T/10))
T/10)**2)*((NACA2T/10)-(40/1000))))) else PartBody\Sketch.2\Offset.198\Offset = (80/1000*((100-
PartBody\Sketch.2\Offset.226\Offset = Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(80/1000)-
40/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
2*(NACA2T/10)+40/1000+1)/(1-NACA2T/10)**2)- 0.1015*(80/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2
NACA34T/(100*0.2)*((100- T/10)**2)*((NACA2T/10)-(80/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(40/1000)- PartBody\Sketch.2\Offset.198\Offset = (80/1000*((100-
0.1260*(40/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.3516*(40/1000)**2+0.2843*(40/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)-
0.1015*(40/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(80/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(40/1000)))))" 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(80/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule93 As Rule (NACA2T/10))**2)*((NACA2T/10)-(80/1000)))))" & vbCrLf
Set rule93 = relations.CreateProgram("rule93", "", "") &_

rule93.Modify "/*Rule created by Francisco Javier Jiménez "if (80/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.228\Offset =
"if (60/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 1T/100)*(80/1000*((100-
PartBody\Sketch.2\Offset.197\Offset = (60/1000*((100- Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- 80/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(60/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)-
0.1260*(60/1000)- 0.1260*(80/1000)-
0.3516*(60/1000)**2+0.2843*(60/1000)**3- 0.3516*(80/1000)**2+0.2843*(80/1000)**3-
0.1015*(60/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA2 0.1015*(80/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA2
T/10)**2)*((NACA2T/10)-(60/1000))))) else T/10)**2)*((NACA2T/10)-(80/1000))))) else
PartBody\Sketch.2\Offset.197\Offset = (60/1000*((100- PartBody\Sketch.2\Offset.228\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura

188
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 189

+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
80/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(136/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+80/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(136/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.200\Offset = (136/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(80/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(80/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)-
0.3516*(80/1000)**2+0.2843*(80/1000)**3- 0.1260*(136/1000)-
0.1015*(80/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(80/1000)))))" 0.1015*(136/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(136/1000)))))" &
Dim rule95 As Rule
vbCrLf & _
Set rule95 = relations.CreateProgram("rule90", "", "") "if (136/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule95.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.230\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (100/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(136/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.199\Offset = (100/1000*((100- 136/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)- 0.1260*(136/1000)-
0.1260*(100/1000)- 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.1015*(136/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(100/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(136/1000))))) else
2T/10)**2)*((NACA2T/10)-(100/1000))))) else PartBody\Sketch.2\Offset.230\Offset =
PartBody\Sketch.2\Offset.199\Offset = (100/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)- 136/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(100/1000)- 2*(NACA2T/10)+136/1000+1)/(1-NACA2T/10)**2)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(100/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(100/1000)))))" & 0.1260*(136/1000)-
vbCrLf & _ 0.3516*(136/1000)**2+0.2843*(136/1000)**3-
"if (100/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(136/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(136/1000)))))"
PartBody\Sketch.2\Offset.229\Offset = Dim rule97 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(100/1000*((100- Set rule97 = relations.CreateProgram("rule97", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule97.Modify "/*Rule created by Francisco Javier Jiménez
100/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)-
0.1260*(100/1000)- "if (172/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(100/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.201\Offset = (172/1000*((100-
2T/10)**2)*((NACA2T/10)-(100/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.229\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(172/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
100/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(172/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+100/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(172/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.201\Offset = (172/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(100/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(100/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
0.3516*(100/1000)**2+0.2843*(100/1000)**3- 0.1260*(172/1000)-
0.1015*(100/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(100/1000)))))" 0.1015*(172/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(172/1000)))))" &
Dim rule96 As Rule vbCrLf & _
Set rule96 = relations.CreateProgram("rule96", "", "") "if (172/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule96.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.231\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (136/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(172/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.200\Offset = (136/1000*((100- 172/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(136/1000)- 0.1260*(172/1000)-
0.1260*(136/1000)- 0.3516*(172/1000)**2+0.2843*(172/1000)**3-

189
190
ANEXOS

0.1015*(172/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(172/1000))))) else PartBody\Sketch.2\Offset.203\Offset = (244/1000*((100-
PartBody\Sketch.2\Offset.231\Offset = Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(244/1000)-
172/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
2*(NACA2T/10)+172/1000+1)/(1-NACA2T/10)**2)- 0.1015*(244/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(244/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(172/1000)- PartBody\Sketch.2\Offset.203\Offset = (244/1000*((100-
0.1260*(172/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.3516*(172/1000)**2+0.2843*(172/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)-
0.1015*(172/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(244/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(172/1000)))))" 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(244/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule98 As Rule
(NACA2T/10))**2)*((NACA2T/10)-(244/1000)))))" &
Set rule98 = relations.CreateProgram("rule98", "", "") vbCrLf & _

rule98.Modify "/*Rule created by Francisco Javier Jiménez "if (244/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.233\Offset =
"if (208/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 1T/100)*(244/1000*((100-
PartBody\Sketch.2\Offset.202\Offset = (208/1000*((100- Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- 244/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)-
0.1260*(208/1000)- 0.1260*(244/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
0.1015*(208/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(244/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(208/1000))))) else 2T/10)**2)*((NACA2T/10)-(244/1000))))) else
PartBody\Sketch.2\Offset.202\Offset = (208/1000*((100- PartBody\Sketch.2\Offset.233\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(208/1000)- 244/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- 2*(NACA2T/10)+244/1000+1)/(1-NACA2T/10)**2)-
0.1015*(208/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(208/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(244/1000)-
vbCrLf & _ 0.1260*(244/1000)-
"if (208/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.3516*(244/1000)**2+0.2843*(244/1000)**3-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 0.1015*(244/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
PartBody\Sketch.2\Offset.232\Offset = (NACA2T/10))**2)*((NACA2T/10)-(244/1000)))))"
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Dim rule100 As Rule
1T/100)*(208/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule100 = relations.CreateProgram("rule100", "", "")
208/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule100.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)- Calvo*/" & vbCrLf & _
0.1260*(208/1000)-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- "if (280/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(208/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(208/1000))))) else PartBody\Sketch.2\Offset.204\Offset = (280/1000*((100-
PartBody\Sketch.2\Offset.232\Offset = Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(280/1000)-
208/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
2*(NACA2T/10)+208/1000+1)/(1-NACA2T/10)**2)- 0.1015*(280/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(280/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(208/1000)- PartBody\Sketch.2\Offset.204\Offset = (280/1000*((100-
0.1260*(208/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.3516*(208/1000)**2+0.2843*(208/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)-
0.1015*(208/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(280/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(208/1000)))))" 0.3516*(280/1000)**2+0.2843*(280/1000)**3-
0.1015*(280/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule99 As Rule (NACA2T/10))**2)*((NACA2T/10)-(280/1000)))))" &
Set rule99 = relations.CreateProgram("rule99", "", "") vbCrLf & _

rule99.Modify "/*Rule created by Francisco Javier Jiménez "if (280/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.234\Offset =
"if (244/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA

190
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 191

1T/100)*(280/1000*((100- Set rule102 = relations.CreateProgram("rule102", "", "")


Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
rule102.Modify "/*Rule created by Francisco Javier Jiménez
280/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)- Calvo*/" & vbCrLf & _
0.1260*(280/1000)- "if (352/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(280/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.206\Offset = (352/1000*((100-
2T/10)**2)*((NACA2T/10)-(280/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.234\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(352/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
280/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(352/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+280/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(352/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.206\Offset = (352/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(280/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(280/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)-
0.3516*(280/1000)**2+0.2843*(280/1000)**3- 0.1260*(352/1000)-
0.1015*(280/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(280/1000)))))" 0.1015*(352/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule101 As Rule (NACA2T/10))**2)*((NACA2T/10)-(352/1000)))))" &
vbCrLf & _
Set rule101 = relations.CreateProgram("rule101", "", "")
"if (352/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule101.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.236\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (316/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(352/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.205\Offset = (316/1000*((100- 352/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)- 0.1260*(352/1000)-
0.1260*(316/1000)- 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- 0.1015*(352/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(316/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(352/1000))))) else
2T/10)**2)*((NACA2T/10)-(316/1000))))) else PartBody\Sketch.2\Offset.236\Offset =
PartBody\Sketch.2\Offset.205\Offset = (316/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)- 352/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(316/1000)- 2*(NACA2T/10)+352/1000+1)/(1-NACA2T/10)**2)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(316/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(352/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(316/1000)))))" & 0.1260*(352/1000)-
vbCrLf & _ 0.3516*(352/1000)**2+0.2843*(352/1000)**3-
"if (316/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(352/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(352/1000)))))"
PartBody\Sketch.2\Offset.235\Offset = Dim rule103 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(316/1000*((100- Set rule103 = relations.CreateProgram("rule103", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
316/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule103.Modify "/*Rule created by Francisco Javier Jiménez
Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)-
0.1260*(316/1000)- "if (388/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(316/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.207\Offset = (388/1000*((100-
2T/10)**2)*((NACA2T/10)-(316/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.235\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(388/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
316/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(388/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+316/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(388/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.207\Offset = (388/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(316/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(316/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)-
0.3516*(316/1000)**2+0.2843*(316/1000)**3- 0.1260*(388/1000)-
0.1015*(316/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(388/1000)**2+0.2843*(388/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(316/1000)))))" 0.1015*(388/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule102 As Rule (NACA2T/10))**2)*((NACA2T/10)-(388/1000)))))" &
vbCrLf & _

191
192
ANEXOS

"if (388/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(424/1000)**4)*cos(atan(2*(NACA1T/100)/((1-


Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(424/1000)))))"
PartBody\Sketch.2\Offset.237\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Dim rule105 As Rule
1T/100)*(388/1000*((100- Set rule105 = relations.CreateProgram("rule105", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
388/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule105.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)- Calvo*/" & vbCrLf & _
0.1260*(388/1000)- "if (460/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(388/1000)**2+0.2843*(388/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(388/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.209\Offset = (460/1000*((100-
2T/10)**2)*((NACA2T/10)-(388/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.237\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(460/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
388/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(460/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+388/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(460/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.209\Offset = (460/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(388/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(388/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)-
0.3516*(388/1000)**2+0.2843*(388/1000)**3- 0.1260*(460/1000)-
0.1015*(388/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(388/1000)))))" 0.1015*(460/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule104 As Rule (NACA2T/10))**2)*((NACA2T/10)-(460/1000)))))" &
vbCrLf & _
Set rule104 = relations.CreateProgram("rule104", "", "")
"if (460/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule104.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.239\Offset =
"if (424/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 1T/100)*(460/1000*((100-
PartBody\Sketch.2\Offset.208\Offset = (424/1000*((100- Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- 460/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)-
0.1260*(424/1000)- 0.1260*(460/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- 0.3516*(460/1000)**2+0.2843*(460/1000)**3-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(460/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(424/1000))))) else 2T/10)**2)*((NACA2T/10)-(460/1000))))) else
PartBody\Sketch.2\Offset.208\Offset = (424/1000*((100- PartBody\Sketch.2\Offset.239\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(424/1000)- 460/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- 2*(NACA2T/10)+460/1000+1)/(1-NACA2T/10)**2)-
0.1015*(424/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(424/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(460/1000)-
vbCrLf & _ 0.1260*(460/1000)-
0.3516*(460/1000)**2+0.2843*(460/1000)**3-
"if (424/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(460/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(460/1000)))))"
PartBody\Sketch.2\Offset.238\Offset =
Dim rule106 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(424/1000*((100- Set rule106 = relations.CreateProgram("rule106", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
424/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule106.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- Calvo*/" & vbCrLf & _
0.1260*(424/1000)- "if (496/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(424/1000)**2+0.2843*(424/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(424/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.210\Offset = (496/1000*((100-
2T/10)**2)*((NACA2T/10)-(424/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.238\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(496/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(496/1000)**2+0.2843*(496/1000)**3-
424/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(496/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+424/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(496/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.210\Offset = (496/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(424/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(424/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
0.3516*(424/1000)**2+0.2843*(424/1000)**3-

192
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 193

0.1260*(496/1000)- 2*(NACA2T/10)+532/1000+1)/(1-NACA2T/10)**2)-
0.3516*(496/1000)**2+0.2843*(496/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(496/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(496/1000)))))" & 0.1260*(532/1000)-
vbCrLf & _ 0.3516*(532/1000)**2+0.2843*(532/1000)**3-
0.1015*(532/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (496/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
(NACA2T/10))**2)*((NACA2T/10)-(532/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.240\Offset = Dim rule108 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(496/1000*((100- Set rule108 = relations.CreateProgram("rule108", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule108.Modify "/*Rule created by Francisco Javier Jiménez
496/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)-
0.1260*(496/1000)- "if (568/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(496/1000)**2+0.2843*(496/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(496/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.212\Offset = (568/1000*((100-
2T/10)**2)*((NACA2T/10)-(496/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.240\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(568/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
496/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(568/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+496/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(568/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.212\Offset = (568/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(496/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(496/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
0.3516*(496/1000)**2+0.2843*(496/1000)**3- 0.1260*(568/1000)-
0.1015*(496/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(496/1000)))))" 0.1015*(568/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(568/1000)))))" &
Dim rule107 As Rule vbCrLf & _
Set rule107 = relations.CreateProgram("rule107", "", "") "if (568/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule107.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.242\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (532/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(568/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.211\Offset = (532/1000*((100- 568/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)- 0.1260*(568/1000)-
0.1260*(532/1000)- 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- 0.1015*(568/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(532/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(568/1000))))) else
2T/10)**2)*((NACA2T/10)-(532/1000))))) else PartBody\Sketch.2\Offset.242\Offset =
PartBody\Sketch.2\Offset.211\Offset = (532/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)- 568/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(532/1000)- 2*(NACA2T/10)+568/1000+1)/(1-NACA2T/10)**2)-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(532/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(568/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(532/1000)))))" & 0.1260*(568/1000)-
vbCrLf & _ 0.3516*(568/1000)**2+0.2843*(568/1000)**3-
0.1015*(568/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (532/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(568/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.241\Offset = Dim rule109 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(532/1000*((100- Set rule109 = relations.CreateProgram("rule109", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule109.Modify "/*Rule created by Francisco Javier Jiménez
532/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(532/1000)-
0.1260*(532/1000)- "if (604/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(532/1000)**2+0.2843*(532/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(532/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.213\Offset = (604/1000*((100-
2T/10)**2)*((NACA2T/10)-(532/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.241\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(604/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(604/1000)**2+0.2843*(604/1000)**3-
532/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(604/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA

193
194
ANEXOS

2T/10)**2)*((NACA2T/10)-(604/1000))))) else 2T/10)**2)*((NACA2T/10)-(640/1000))))) else


PartBody\Sketch.2\Offset.213\Offset = (604/1000*((100- PartBody\Sketch.2\Offset.244\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(604/1000)- 640/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(604/1000)**2+0.2843*(604/1000)**3- 2*(NACA2T/10)+640/1000+1)/(1-NACA2T/10)**2)-
0.1015*(604/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(604/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)-
vbCrLf & _ 0.1260*(640/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3-
"if (604/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(640/1000)))))"
PartBody\Sketch.2\Offset.243\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Dim rule111 As Rule
1T/100)*(604/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule111 = relations.CreateProgram("rule111", "", "")
604/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule111.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)- Calvo*/" & vbCrLf & _
0.1260*(604/1000)-
0.3516*(604/1000)**2+0.2843*(604/1000)**3- "if (676/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(604/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))
2T/10)**2)*((NACA2T/10)-(604/1000))))) else PartBody\Sketch.2\Offset.215\Offset = (676/1000*((100-
PartBody\Sketch.2\Offset.243\Offset = Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
(Semienvergadura*tan(Diedro))+(Semienvergadura Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.1260*(676/1000)-
604/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
2*(NACA2T/10)+604/1000+1)/(1-NACA2T/10)**2)- 0.1015*(676/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
NACA34T/(100*0.2)*((100- 2T/10)**2)*((NACA2T/10)-(676/1000))))) else
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(604/1000)- PartBody\Sketch.2\Offset.215\Offset = (676/1000*((100-
0.1260*(604/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.3516*(604/1000)**2+0.2843*(604/1000)**3- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)-
0.1015*(604/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.1260*(676/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(604/1000)))))" 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(676/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule110 As Rule (NACA2T/10))**2)*((NACA2T/10)-(676/1000)))))" &
Set rule110 = relations.CreateProgram("rule110", "", "") vbCrLf & _

rule110.Modify "/*Rule created by Francisco Javier Jiménez "if (676/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Calvo*/" & vbCrLf & _ Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.245\Offset =
"if (640/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(NACA2T/10)) 1T/100)*(676/1000*((100-
PartBody\Sketch.2\Offset.214\Offset = (640/1000*((100- Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- 676/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)-
0.1260*(640/1000)- 0.1260*(676/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- 0.3516*(676/1000)**2+0.2843*(676/1000)**3-
0.1015*(640/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 0.1015*(676/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
2T/10)**2)*((NACA2T/10)-(640/1000))))) else 2T/10)**2)*((NACA2T/10)-(676/1000))))) else
PartBody\Sketch.2\Offset.214\Offset = (640/1000*((100- PartBody\Sketch.2\Offset.245\Offset =
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- 1T/100)*(((100-Estrechamiento)/100)*Cuerda-
0.1260*(640/1000)- 676/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- 2*(NACA2T/10)+676/1000+1)/(1-NACA2T/10)**2)-
0.1015*(640/1000)**4)*sin(atan(2*(NACA1T/100)/((1- NACA34T/(100*0.2)*((100-
(NACA2T/10))**2)*((NACA2T/10)-(640/1000)))))" & Estrechamiento)/100)*Cuerda*(0.2969*sqrt(676/1000)-
vbCrLf & _ 0.1260*(676/1000)-
0.3516*(676/1000)**2+0.2843*(676/1000)**3-
"if (640/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(676/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
(NACA2T/10))**2)*((NACA2T/10)-(676/1000)))))"
PartBody\Sketch.2\Offset.244\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Dim rule112 As Rule
1T/100)*(640/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- Set rule112 = relations.CreateProgram("rule112", "", "")
640/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule112.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(640/1000)- Calvo*/" & vbCrLf & _
0.1260*(640/1000)-
0.3516*(640/1000)**2+0.2843*(640/1000)**3- "if (712/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.1015*(640/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA Estrechamiento)/100)*Cuerda*(NACA2T/10))

194
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 195

PartBody\Sketch.2\Offset.216\Offset = (712/1000*((100- 748/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-


Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)- 0.1260*(748/1000)-
0.1260*(712/1000)- 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- 0.1015*(748/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(712/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(748/1000))))) else
2T/10)**2)*((NACA2T/10)-(712/1000))))) else PartBody\Sketch.2\Offset.247\Offset =
PartBody\Sketch.2\Offset.216\Offset = (712/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)- 748/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(712/1000)- 2*(NACA2T/10)+748/1000+1)/(1-NACA2T/10)**2)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(712/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(712/1000)))))" & 0.1260*(748/1000)-
vbCrLf & _ 0.3516*(748/1000)**2+0.2843*(748/1000)**3-
0.1015*(748/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (712/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(748/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.246\Offset = Dim rule114 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(712/1000*((100- Set rule114 = relations.CreateProgram("rule114", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule114.Modify "/*Rule created by Francisco Javier Jiménez
712/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)-
0.1260*(712/1000)- "if (784/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(712/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.218\Offset = (784/1000*((100-
2T/10)**2)*((NACA2T/10)-(712/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.246\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA 0.1260*(784/1000)-
1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
712/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(784/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+712/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(784/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.218\Offset = (784/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(712/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(712/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-
0.3516*(712/1000)**2+0.2843*(712/1000)**3- 0.1260*(784/1000)-
0.1015*(712/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(712/1000)))))" 0.1015*(784/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(784/1000)))))" &
Dim rule113 As Rule vbCrLf & _
Set rule113 = relations.CreateProgram("rule113", "", "") "if (784/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule113.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.248\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (748/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(784/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.217\Offset = (748/1000*((100- 784/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)- 0.1260*(784/1000)-
0.1260*(748/1000)- 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- 0.1015*(784/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(748/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(784/1000))))) else
2T/10)**2)*((NACA2T/10)-(748/1000))))) else PartBody\Sketch.2\Offset.248\Offset =
PartBody\Sketch.2\Offset.217\Offset = (748/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(748/1000)- 784/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(748/1000)- 2*(NACA2T/10)+784/1000+1)/(1-NACA2T/10)**2)-
0.3516*(748/1000)**2+0.2843*(748/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(748/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(784/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(748/1000)))))" & 0.1260*(784/1000)-
vbCrLf & _ 0.3516*(784/1000)**2+0.2843*(784/1000)**3-
0.1015*(784/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (748/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(784/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.247\Offset = Dim rule115 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(748/1000*((100- Set rule115 = relations.CreateProgram("rule115", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule115.Modify "/*Rule created by Francisco Javier Jiménez

195
196
ANEXOS

Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.250\Offset =


(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (820/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
1T/100)*(856/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.219\Offset = (820/1000*((100- 856/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)-
0.1260*(856/1000)-
0.1260*(820/1000)- 0.3516*(856/1000)**2+0.2843*(856/1000)**3-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 0.1015*(856/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(820/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(856/1000))))) else
2T/10)**2)*((NACA2T/10)-(820/1000))))) else
PartBody\Sketch.2\Offset.250\Offset =
PartBody\Sketch.2\Offset.219\Offset = (820/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)- 856/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(820/1000)-
2*(NACA2T/10)+856/1000+1)/(1-NACA2T/10)**2)-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(820/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(820/1000)))))" & 0.1260*(856/1000)-
vbCrLf & _
0.3516*(856/1000)**2+0.2843*(856/1000)**3-
"if (820/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(856/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(856/1000)))))"
PartBody\Sketch.2\Offset.249\Offset = Dim rule117 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
1T/100)*(820/1000*((100- Set rule117 = relations.CreateProgram("rule117", "", "")
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
820/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- rule117.Modify "/*Rule created by Francisco Javier Jiménez
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)- Calvo*/" & vbCrLf & _
0.1260*(820/1000)- "if (892/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(820/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.221\Offset = (892/1000*((100-
2T/10)**2)*((NACA2T/10)-(820/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.249\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(892/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
820/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(892/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA
2*(NACA2T/10)+820/1000+1)/(1-NACA2T/10)**2)- 2T/10)**2)*((NACA2T/10)-(892/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.221\Offset = (892/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(820/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(820/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
0.3516*(820/1000)**2+0.2843*(820/1000)**3- 0.1260*(892/1000)-
0.1015*(820/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(820/1000)))))" 0.1015*(892/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
Dim rule116 As Rule (NACA2T/10))**2)*((NACA2T/10)-(892/1000)))))" &
vbCrLf & _
Set rule116 = relations.CreateProgram("rule116", "", "")
"if (892/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
rule116.Modify "/*Rule created by Francisco Javier Jiménez Estrechamiento)/100)*Cuerda*(NACA2T/10))
Calvo*/" & vbCrLf & _ PartBody\Sketch.2\Offset.251\Offset =
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (856/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(892/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.220\Offset = (856/1000*((100- 892/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- 0.1260*(892/1000)-
0.1260*(856/1000)-
0.3516*(892/1000)**2+0.2843*(892/1000)**3-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- 0.1015*(892/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(856/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(892/1000))))) else
2T/10)**2)*((NACA2T/10)-(856/1000))))) else PartBody\Sketch.2\Offset.251\Offset =
PartBody\Sketch.2\Offset.220\Offset = (856/1000*((100-
(Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(856/1000)- 892/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(856/1000)- 2*(NACA2T/10)+892/1000+1)/(1-NACA2T/10)**2)-
0.3516*(856/1000)**2+0.2843*(856/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(856/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(892/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(856/1000)))))" & 0.1260*(892/1000)-
vbCrLf & _ 0.3516*(892/1000)**2+0.2843*(892/1000)**3-
"if (856/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 0.1015*(892/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) (NACA2T/10))**2)*((NACA2T/10)-(892/1000)))))"

196
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 197

Dim rule118 As Rule vbCrLf & _


Set rule118 = relations.CreateProgram("rule118", "", "") "if (964/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule118.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.253\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (928/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(964/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.222\Offset = (928/1000*((100- 964/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)- 0.1260*(964/1000)-
0.1260*(928/1000)- 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- 0.1015*(964/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA
0.1015*(928/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA 2T/10)**2)*((NACA2T/10)-(964/1000))))) else
2T/10)**2)*((NACA2T/10)-(928/1000))))) else PartBody\Sketch.2\Offset.253\Offset =
PartBody\Sketch.2\Offset.222\Offset = (928/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)- 964/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(928/1000)- 2*(NACA2T/10)+964/1000+1)/(1-NACA2T/10)**2)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(928/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(928/1000)))))" & 0.1260*(964/1000)-
vbCrLf & _ 0.3516*(964/1000)**2+0.2843*(964/1000)**3-
0.1015*(964/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
"if (928/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- (NACA2T/10))**2)*((NACA2T/10)-(964/1000)))))"
Estrechamiento)/100)*Cuerda*(NACA2T/10))
PartBody\Sketch.2\Offset.252\Offset = Dim rule120 As Rule
(Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA Set rule120 = relations.CreateProgram("rule120", "", "")
1T/100)*(928/1000*((100-
Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)- rule120.Modify "/*Rule created by Francisco Javier Jiménez
928/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100- Calvo*/" & vbCrLf & _
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)-
0.1260*(928/1000)- "if (1000/1000*((100-Estrechamiento)/100)*Cuerda) <=
0.3516*(928/1000)**2+0.2843*(928/1000)**3- (((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))
0.1015*(928/1000)**4)*cos(atan(2*(NACA1T/100)/((NACA PartBody\Sketch.2\Offset.224\Offset = (1000/1000*((100-
2T/10)**2)*((NACA2T/10)-(928/1000))))) else Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
PartBody\Sketch.2\Offset.252\Offset = Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
(Semienvergadura*tan(Diedro))+(Semienvergadura 0.1260*(1000/1000)-
+((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
928/1000*((100-Estrechamiento)/100)*Cuerda)*(- 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1T/100)/((NAC
2*(NACA2T/10)+928/1000+1)/(1-NACA2T/10)**2)- A2T/10)**2)*((NACA2T/10)-(1000/1000))))) else
NACA34T/(100*0.2)*((100- PartBody\Sketch.2\Offset.224\Offset = (1000/1000*((100-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(928/1000)- Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100-
0.1260*(928/1000)- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
0.3516*(928/1000)**2+0.2843*(928/1000)**3- 0.1260*(1000/1000)-
0.1015*(928/1000)**4)*cos(atan(2*(NACA1T/100)/((1- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
(NACA2T/10))**2)*((NACA2T/10)-(928/1000)))))" 0.1015*(1000/1000)**4)*sin(atan(2*(NACA1T/100)/((1-
(NACA2T/10))**2)*((NACA2T/10)-(1000/1000)))))" &
Dim rule119 As Rule vbCrLf & _
Set rule119 = relations.CreateProgram("rule119", "", "") "if (1000/1000*((100-Estrechamiento)/100)*Cuerda) <=
(((100-Estrechamiento)/100)*Cuerda*(NACA2T/10))
rule119.Modify "/*Rule created by Francisco Javier Jiménez PartBody\Sketch.2\Offset.254\Offset =
Calvo*/" & vbCrLf & _ (Semienvergadura*tan(Diedro))+(Semienvergadura+((NACA
"if (964/1000*((100-Estrechamiento)/100)*Cuerda) <= (((100- 1T/100)*(1000/1000*((100-
Estrechamiento)/100)*Cuerda*(NACA2T/10)) Estrechamiento)/100)*Cuerda)*(2*(NACA2T/10)-
PartBody\Sketch.2\Offset.223\Offset = (964/1000*((100- 1000/1000)/(NACA2T/10)**2)-NACA34T/(100*0.2)*((100-
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)- 0.1260*(1000/1000)-
0.1260*(964/1000)- 0.3516*(1000/1000)**2+0.2843*(1000/1000)**3-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- 0.1015*(1000/1000)**4)*cos(atan(2*(NACA1T/100)/((NAC
0.1015*(964/1000)**4)*sin(atan(2*(NACA1T/100)/((NACA A2T/10)**2)*((NACA2T/10)-(1000/1000))))) else
2T/10)**2)*((NACA2T/10)-(964/1000))))) else PartBody\Sketch.2\Offset.254\Offset =
PartBody\Sketch.2\Offset.223\Offset = (964/1000*((100- (Semienvergadura*tan(Diedro))+(Semienvergadura
Estrechamiento)/100)*Cuerda + NACA34T/(100*0.2)*((100- +((NACA1T/100)*(((100-Estrechamiento)/100)*Cuerda-
Estrechamiento)/100)*Cuerda*(0.2969*sqrt(964/1000)- 1000/1000*((100-Estrechamiento)/100)*Cuerda)*(-
0.1260*(964/1000)- 2*(NACA2T/10)+1000/1000+1)/(1-NACA2T/10)**2)-
0.3516*(964/1000)**2+0.2843*(964/1000)**3- NACA34T/(100*0.2)*((100-
0.1015*(964/1000)**4)*sin(atan(2*(NACA1T/100)/((1- Estrechamiento)/100)*Cuerda*(0.2969*sqrt(1000/1000)-
(NACA2T/10))**2)*((NACA2T/10)-(964/1000)))))" & 0.1260*(1000/1000)-

197
198
ANEXOS

0.3516*(1000/1000)**2+0.2843*(1000/1000)**3- reSupport;MFBRepVersion_CXR15)", sketch1)


0.1015*(1000/1000)**4)*cos(atan(2*(NACA1T/100)/((1-
Dim reference267 As Reference
(NACA2T/10))**2)*((NACA2T/10)-(1000/1000)))))"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference267 =
part1.CreateReferenceFromBRepName("BorderFVertex:(BEd
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ge:(Brp:(Sketch.2;134);None:(Limits1:();Limits2:();+1);Cf11:(
));WithPermanentBody;WithoutBuildError;WithSelectingFeat
'' LINEA PUNTOS BORDE DE ATAQUE '' ureSupport;MFBRepVersion_CXR15)", sketch2)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim hybridShapeLinePtPt1 As HybridShapeLinePtPt
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set hybridShapeLinePtPt1 =
'Creamos la linea que unirá los bordes de ataque de ambos hybridShapeFactory1.AddNewLinePtPt(reference266,
perfiles reference267)

Dim reference266 As Reference body1.InsertHybridShape hybridShapeLinePtPt1

Set reference266 = part1.InWorkObject = hybridShapeLinePtPt1


part1.CreateReferenceFromBRepName("BorderFVertex:(BEd
ge:(Brp:(Sketch.1;64);None:(Limits1:();Limits2:();+1);Cf11:()
);WithPermanentBody;WithoutBuildError;WithSelectingFeatu

ANEXO 4. CÓDIGO ALA IZQUIERDA SUPERFICIE

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' body1.InsertHybridShape hybridShapeLoft1


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.InWorkObject = hybridShapeLoft1
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' part1.Update
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim hybridShapeLoft1 As HybridShapeLoft Dim hybridShapeLoft2 As HybridShapeLoft
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft() Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft()
hybridShapeLoft1.SectionCoupling = 1 hybridShapeLoft2.SectionCoupling = 1
hybridShapeLoft1.Relimitation = 1 hybridShapeLoft2.Relimitation = 1
hybridShapeLoft1.CanonicalDetection = 2 hybridShapeLoft2.CanonicalDetection = 2
Dim reference268 As Reference Dim reference271 As Reference
Set reference268 = Set reference271 =
part1.CreateReferenceFromObject(hybridShapeLinePtPt1) part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
hybridShapeLoft1.AddGuide reference268 manentBody;WithoutBuildError;WithSelectingFeatureSupport
Dim reference269 As Reference ;MFBRepVersion_CXR15)", sketch1)

Set reference269 = hybridShapeLoft2.AddSectionToLoft reference271, 1,


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Nothing
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP Dim reference272 As Reference
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp
ort;MFBRepVersion_CXR15)", sketch1) Set reference272 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
hybridShapeLoft1.AddSectionToLoft reference269, 1, rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer
Nothing manentBody;WithoutBuildError;WithSelectingFeatureSupport
Dim reference270 As Reference ;MFBRepVersion_CXR15)", sketch2)

Set reference270 = hybridShapeLoft2.AddSectionToLoft reference272, 1,


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Nothing
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer body1.InsertHybridShape hybridShapeLoft2
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2) part1.InWorkObject = hybridShapeLoft2
hybridShapeLoft1.AddSectionToLoft reference270, 1, part1.Update
Nothing

198
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 199

CATIA.ActiveDocument.Part.Update Dim reference277 As Reference


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference277 =
part1.CreateReferenceFromObject(hybridShapeFill1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeAssemble1.AddElement reference277
'' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) ''
Dim reference278 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set reference278 =
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.CreateReferenceFromObject(hybridShapeFill2)
Dim hybridShapeFill1 As HybridShapeFill hybridShapeAssemble1.AddElement reference278
Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill() hybridShapeAssemble1.SetConnex 1
Dim reference273 As Reference hybridShapeAssemble1.SetManifold 0
Set reference273 = hybridShapeAssemble1.SetSimplify 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer hybridShapeAssemble1.SetSuppressMode 0
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch1) hybridShapeAssemble1.SetDeviation 0.001

hybridShapeFill1.AddBound reference273 hybridShapeAssemble1.SetAngularToleranceMode 0

Dim reference274 As Reference hybridShapeAssemble1.SetAngularTolerance 0.5

Set reference274 = hybridShapeAssemble1.SetFederationPropagation 0


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B body1.InsertHybridShape hybridShapeAssemble1
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp part1.InWorkObject = hybridShapeAssemble1
ort;MFBRepVersion_CXR15)", sketch1) part1.Update
hybridShapeFill1.AddBound reference274 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeFill1.Continuity = 0 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
body1.InsertHybridShape hybridShapeFill1 '' HIDE SKETCHES & LINES ''
part1.InWorkObject = hybridShapeFill1 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.Update '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim selection1 As Selection
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set selection1 = partDocument1.Selection
Dim hybridShapeFill2 As HybridShapeFill Dim visPropertySet1 As VisPropertySet
Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill() Set visPropertySet1 = selection1.VisProperties
hybridShapeFill2.AddBound reference270 Set sketches1 = sketch1.Parent
hybridShapeFill2.AddBound reference272 Dim bSTR1 As String
hybridShapeFill2.Continuity = 0 bSTR1 = sketch1.Name
body1.InsertHybridShape hybridShapeFill2 selection1.Add sketch1
part1.InWorkObject = hybridShapeFill2 Set visPropertySet1 = visPropertySet1.Parent
part1.Update Dim bSTR2 As String
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' bSTR2 = visPropertySet1.Name
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim bSTR3 As String
Dim reference275 As Reference bSTR3 = visPropertySet1.Name
Set reference275 = visPropertySet1.SetShow 1
part1.CreateReferenceFromObject(hybridShapeLoft1)
selection1.Clear
Dim reference276 As Reference
Dim selection2 As Selection
Set reference276 =
part1.CreateReferenceFromObject(hybridShapeLoft2) Set selection2 = partDocument1.Selection
Dim hybridShapeAssemble1 As HybridShapeAssemble Dim visPropertySet2 As VisPropertySet
Set hybridShapeAssemble1 = Set visPropertySet2 = selection2.VisProperties
hybridShapeFactory1.AddNewJoin(reference275,
Set hybridShapes1 = hybridShapePlaneOffset1.Parent
reference276)

199
200
ANEXOS

Dim bSTR4 As String selection3.Clear


bSTR4 = hybridShapePlaneOffset1.Name Dim selection4 As Selection
selection2.Add hybridShapePlaneOffset1 Set selection4 = partDocument1.Selection
Set visPropertySet2 = visPropertySet2.Parent Dim visPropertySet4 As VisPropertySet
Dim bSTR5 As String Set visPropertySet4 = selection4.VisProperties
bSTR5 = visPropertySet2.Name Set hybridShapes1 = hybridShapeLinePtPt1.Parent
Dim bSTR6 As String Dim bSTR10 As String
bSTR6 = visPropertySet2.Name bSTR10 = hybridShapeLinePtPt1.Name
visPropertySet2.SetShow 1 selection4.Add hybridShapeLinePtPt1
selection2.Clear Set visPropertySet4 = visPropertySet4.Parent
Dim selection3 As Selection Dim bSTR11 As String
Set selection3 = partDocument1.Selection bSTR11 = visPropertySet4.Name
Dim visPropertySet3 As VisPropertySet Dim bSTR12 As String
Set visPropertySet3 = selection3.VisProperties bSTR12 = visPropertySet4.Name
Set sketches1 = sketch2.Parent visPropertySet4.SetShow 1
Dim bSTR7 As String selection4.Clear
bSTR7 = sketch2.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection3.Add sketch2 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet3 = visPropertySet3.Parent '' ACTUALIZAMOS Y CERRAMOS EL DOCUMENTO''
Dim bSTR8 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR8 = visPropertySet3.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR9 As String ' Se actualiza el documento y se cierra la interface
bSTR9 = visPropertySet3.Name CATIA.ActiveDocument.Part.Update
visPropertySet3.SetShow 1 Unload Me

ANEXO 5. CÓDIGO ALA DERECHA SUPERFICIE

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference269 As Reference


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference269 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ermanentBody;WithoutBuildError;WithSelectingFeatureSupp
ort;MFBRepVersion_CXR15)", sketch1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeLoft1.AddSectionToLoft reference269, 1,
Dim hybridShapeLoft1 As HybridShapeLoft Nothing
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft() Dim reference270 As Reference
hybridShapeLoft1.SectionCoupling = 1 Set reference270 =
hybridShapeLoft1.Relimitation = 1 part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer
hybridShapeLoft1.CanonicalDetection = 2 manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2)
Dim reference268 As Reference
hybridShapeLoft1.AddSectionToLoft reference270, 1,
Set reference268 =
Nothing
part1.CreateReferenceFromObject(hybridShapeLinePtPt1)
body1.InsertHybridShape hybridShapeLoft1
hybridShapeLoft1.AddGuide reference268
part1.InWorkObject = hybridShapeLoft1

200
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 201

part1.Update body1.InsertHybridShape hybridShapeFill1


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.InWorkObject = hybridShapeFill1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.Update
Dim hybridShapeLoft2 As HybridShapeLoft '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft() '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeLoft2.SectionCoupling = 1 Dim hybridShapeFill2 As HybridShapeFill
hybridShapeLoft2.Relimitation = 1 Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill()
hybridShapeLoft2.CanonicalDetection = 2 hybridShapeFill2.AddBound reference270
Dim reference271 As Reference hybridShapeFill2.AddBound reference272
Set reference271 = hybridShapeFill2.Continuity = 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer body1.InsertHybridShape hybridShapeFill2
manentBody;WithoutBuildError;WithSelectingFeatureSupport part1.InWorkObject = hybridShapeFill2
;MFBRepVersion_CXR15)", sketch1)
part1.Update
hybridShapeLoft2.AddSectionToLoft reference271, 1,
Nothing '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim reference272 As Reference '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set reference272 = Dim reference275 As Reference


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Set reference275 =
rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer part1.CreateReferenceFromObject(hybridShapeLoft1)
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2) Dim reference276 As Reference
hybridShapeLoft2.AddSectionToLoft reference272, 1, Set reference276 =
Nothing part1.CreateReferenceFromObject(hybridShapeLoft2)
body1.InsertHybridShape hybridShapeLoft2 Dim hybridShapeAssemble1 As HybridShapeAssemble
part1.InWorkObject = hybridShapeLoft2 Set hybridShapeAssemble1 =
hybridShapeFactory1.AddNewJoin(reference275,
part1.Update reference276)
CATIA.ActiveDocument.Part.Update Dim reference277 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference277 =
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.CreateReferenceFromObject(hybridShapeFill1)

'' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) '' hybridShapeAssemble1.AddElement reference277

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference278 As Reference

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference278 =


part1.CreateReferenceFromObject(hybridShapeFill2)
Dim hybridShapeFill1 As HybridShapeFill
hybridShapeAssemble1.AddElement reference278
Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill()
hybridShapeAssemble1.SetConnex 1
Dim reference273 As Reference
hybridShapeAssemble1.SetManifold 0
Set reference273 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B hybridShapeAssemble1.SetSimplify 0
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer hybridShapeAssemble1.SetSuppressMode 0
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch1) hybridShapeAssemble1.SetDeviation 0.001
hybridShapeFill1.AddBound reference273 hybridShapeAssemble1.SetAngularToleranceMode 0
Dim reference274 As Reference hybridShapeAssemble1.SetAngularTolerance 0.5
Set reference274 = hybridShapeAssemble1.SetFederationPropagation 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
body1.InsertHybridShape hybridShapeAssemble1
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp part1.InWorkObject = hybridShapeAssemble1
ort;MFBRepVersion_CXR15)", sketch1)
part1.Update
hybridShapeFill1.AddBound reference274
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeFill1.Continuity = 0
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

201
202
ANEXOS

'' HIDE SKETCHES & LINES '' bSTR8 = visPropertySet3.Name


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim bSTR9 As String
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' bSTR9 = visPropertySet3.Name
Dim selection1 As Selection visPropertySet3.SetShow 1
Set selection1 = partDocument1.Selection selection3.Clear
Dim visPropertySet1 As VisPropertySet Dim selection4 As Selection
Set visPropertySet1 = selection1.VisProperties Set selection4 = partDocument1.Selection
Set sketches1 = sketch1.Parent Dim visPropertySet4 As VisPropertySet
Dim bSTR1 As String Set visPropertySet4 = selection4.VisProperties
bSTR1 = sketch1.Name Set hybridShapes1 = hybridShapeLinePtPt1.Parent
selection1.Add sketch1 Dim bSTR10 As String
Set visPropertySet1 = visPropertySet1.Parent bSTR10 = hybridShapeLinePtPt1.Name
Dim bSTR2 As String selection4.Add hybridShapeLinePtPt1
bSTR2 = visPropertySet1.Name Set visPropertySet4 = visPropertySet4.Parent
Dim bSTR3 As String Dim bSTR11 As String
bSTR3 = visPropertySet1.Name bSTR11 = visPropertySet4.Name
visPropertySet1.SetShow 1 Dim bSTR12 As String
selection1.Clear bSTR12 = visPropertySet4.Name
Dim selection2 As Selection visPropertySet4.SetShow 1
Set selection2 = partDocument1.Selection selection4.Clear
Dim visPropertySet2 As VisPropertySet '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet2 = selection2.VisProperties '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set hybridShapes1 = hybridShapePlaneOffset1.Parent '' SIMETRIA SUPERCIE ''
Dim bSTR4 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR4 = hybridShapePlaneOffset1.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection2.Add hybridShapePlaneOffset1 Dim reference279 As Reference
Set visPropertySet2 = visPropertySet2.Parent Set reference279 =
part1.CreateReferenceFromObject(hybridShapeAssemble1)
Dim bSTR5 As String
Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit
bSTR5 = visPropertySet2.Name
Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
Dim bSTR6 As String
Dim reference280 As Reference
bSTR6 = visPropertySet2.Name
Set reference280 =
visPropertySet2.SetShow 1 part1.CreateReferenceFromObject(hybridShapePlaneExplicit2
selection2.Clear )

Dim selection3 As Selection Dim hybridShapeSymmetry1 As HybridShapeSymmetry

Set selection3 = partDocument1.Selection Set hybridShapeSymmetry1 =


hybridShapeFactory1.AddNewSymmetry(reference279,
Dim visPropertySet3 As VisPropertySet reference280)
Set visPropertySet3 = selection3.VisProperties hybridShapeSymmetry1.VolumeResult = False
Set sketches1 = sketch2.Parent body1.InsertHybridShape hybridShapeSymmetry1
Dim bSTR7 As String part1.InWorkObject = hybridShapeSymmetry1
bSTR7 = sketch2.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection3.Add sketch2 Dim selection5 As Selection
Set visPropertySet3 = visPropertySet3.Parent Set selection5 = partDocument1.Selection
Dim bSTR8 As String Dim visPropertySet5 As VisPropertySet

202
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 203

Set visPropertySet5 = selection5.VisProperties visPropertySet5.SetShow 1


Set hybridShapes1 = hybridShapeAssemble1.Parent selection5.Clear
Dim bSTR13 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR13 = hybridShapeAssemble1.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection5.Add hybridShapeAssemble1 '' ACTUALIZAMOS Y CERRAMOS EL DOCUMENTO ''
Set visPropertySet5 = visPropertySet5.Parent '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR14 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR14 = visPropertySet5.Name ' Se actualiza el documento y se cierra la interface
Dim bSTR15 As String CATIA.ActiveDocument.Part.Update
bSTR15 = visPropertySet5.Name Unload Me

ANEXO 6. CÓDIGO ALAS SUPERFICIES

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.Update
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim hybridShapeLoft2 As HybridShapeLoft
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft()
Dim hybridShapeLoft1 As HybridShapeLoft hybridShapeLoft2.SectionCoupling = 1
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft() hybridShapeLoft2.Relimitation = 1
hybridShapeLoft1.SectionCoupling = 1 hybridShapeLoft2.CanonicalDetection = 2
hybridShapeLoft1.Relimitation = 1 Dim reference271 As Reference
hybridShapeLoft1.CanonicalDetection = 2 Set reference271 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
Dim reference268 As Reference rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
Set reference268 = manentBody;WithoutBuildError;WithSelectingFeatureSupport
part1.CreateReferenceFromObject(hybridShapeLinePtPt1) ;MFBRepVersion_CXR15)", sketch1)

hybridShapeLoft1.AddGuide reference268 hybridShapeLoft2.AddSectionToLoft reference271, 1,


Nothing
Dim reference269 As Reference
Dim reference272 As Reference
Set reference269 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Set reference272 =
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer
ort;MFBRepVersion_CXR15)", sketch1) manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2)
hybridShapeLoft1.AddSectionToLoft reference269, 1,
Nothing hybridShapeLoft2.AddSectionToLoft reference272, 1,
Nothing
Dim reference270 As Reference
body1.InsertHybridShape hybridShapeLoft2
Set reference270 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B part1.InWorkObject = hybridShapeLoft2
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer part1.Update
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2) CATIA.ActiveDocument.Part.Update
hybridShapeLoft1.AddSectionToLoft reference270, 1, '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Nothing
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
body1.InsertHybridShape hybridShapeLoft1
'' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) ''
part1.InWorkObject = hybridShapeLoft1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

203
204
ANEXOS

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference278 =


part1.CreateReferenceFromObject(hybridShapeFill2)
Dim hybridShapeFill1 As HybridShapeFill
hybridShapeAssemble1.AddElement reference278
Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill()
hybridShapeAssemble1.SetConnex 1
Dim reference273 As Reference
hybridShapeAssemble1.SetManifold 0
Set reference273 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B hybridShapeAssemble1.SetSimplify 0
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
manentBody;WithoutBuildError;WithSelectingFeatureSupport hybridShapeAssemble1.SetSuppressMode 0
;MFBRepVersion_CXR15)", sketch1) hybridShapeAssemble1.SetDeviation 0.001
hybridShapeFill1.AddBound reference273 hybridShapeAssemble1.SetAngularToleranceMode 0
Dim reference274 As Reference hybridShapeAssemble1.SetAngularTolerance 0.5
Set reference274 = hybridShapeAssemble1.SetFederationPropagation 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP body1.InsertHybridShape hybridShapeAssemble1
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp part1.InWorkObject = hybridShapeAssemble1
ort;MFBRepVersion_CXR15)", sketch1)
part1.Update
hybridShapeFill1.AddBound reference274
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeFill1.Continuity = 0
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
body1.InsertHybridShape hybridShapeFill1
'' HIDE SKETCHES & LINES ''
part1.InWorkObject = hybridShapeFill1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
part1.Update
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim selection1 As Selection
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set selection1 = partDocument1.Selection
Dim hybridShapeFill2 As HybridShapeFill
Dim visPropertySet1 As VisPropertySet
Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill()
Set visPropertySet1 = selection1.VisProperties
hybridShapeFill2.AddBound reference270
Set sketches1 = sketch1.Parent
hybridShapeFill2.AddBound reference272
Dim bSTR1 As String
hybridShapeFill2.Continuity = 0
bSTR1 = sketch1.Name
body1.InsertHybridShape hybridShapeFill2
selection1.Add sketch1
part1.InWorkObject = hybridShapeFill2
Set visPropertySet1 = visPropertySet1.Parent
part1.Update
Dim bSTR2 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR2 = visPropertySet1.Name
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR3 As String
Dim reference275 As Reference
bSTR3 = visPropertySet1.Name
Set reference275 =
part1.CreateReferenceFromObject(hybridShapeLoft1) visPropertySet1.SetShow 1
Dim reference276 As Reference selection1.Clear
Set reference276 = Dim selection2 As Selection
part1.CreateReferenceFromObject(hybridShapeLoft2)
Set selection2 = partDocument1.Selection
Dim hybridShapeAssemble1 As HybridShapeAssemble
Dim visPropertySet2 As VisPropertySet
Set hybridShapeAssemble1 =
Set visPropertySet2 = selection2.VisProperties
hybridShapeFactory1.AddNewJoin(reference275,
reference276) Set hybridShapes1 = hybridShapePlaneOffset1.Parent
Dim reference277 As Reference Dim bSTR4 As String
Set reference277 = bSTR4 = hybridShapePlaneOffset1.Name
part1.CreateReferenceFromObject(hybridShapeFill1)
selection2.Add hybridShapePlaneOffset1
hybridShapeAssemble1.AddElement reference277
Set visPropertySet2 = visPropertySet2.Parent
Dim reference278 As Reference

204
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 205

Dim bSTR5 As String Set reference279 =


part1.CreateReferenceFromObject(hybridShapeAssemble1)
bSTR5 = visPropertySet2.Name
Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit
Dim bSTR6 As String
Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
bSTR6 = visPropertySet2.Name
Dim reference280 As Reference
visPropertySet2.SetShow 1
Set reference280 =
selection2.Clear part1.CreateReferenceFromObject(hybridShapePlaneExplicit2
Dim selection3 As Selection )

Set selection3 = partDocument1.Selection Dim hybridShapeSymmetry1 As HybridShapeSymmetry

Dim visPropertySet3 As VisPropertySet Set hybridShapeSymmetry1 =


hybridShapeFactory1.AddNewSymmetry(reference279,
Set visPropertySet3 = selection3.VisProperties reference280)
Set sketches1 = sketch2.Parent hybridShapeSymmetry1.VolumeResult = False
Dim bSTR7 As String body1.InsertHybridShape hybridShapeSymmetry1
bSTR7 = sketch2.Name part1.InWorkObject = hybridShapeSymmetry1
selection3.Add sketch2 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet3 = visPropertySet3.Parent Dim reference281 As Reference
Dim bSTR8 As String Set reference281 =
bSTR8 = visPropertySet3.Name part1.CreateReferenceFromObject(hybridShapeAssemble1)

Dim bSTR9 As String Dim reference282 As Reference

bSTR9 = visPropertySet3.Name Set reference282 =


part1.CreateReferenceFromObject(hybridShapeSymmetry1)
visPropertySet3.SetShow 1
Dim hybridShapeAssemble2 As HybridShapeAssemble
selection3.Clear
Set hybridShapeAssemble2 =
Dim selection4 As Selection hybridShapeFactory1.AddNewJoin(reference281,
reference282)
Set selection4 = partDocument1.Selection
hybridShapeAssemble2.SetConnex 0
Dim visPropertySet4 As VisPropertySet
hybridShapeAssemble2.SetManifold 0
Set visPropertySet4 = selection4.VisProperties
hybridShapeAssemble2.SetSimplify 0
Set hybridShapes1 = hybridShapeLinePtPt1.Parent
hybridShapeAssemble2.SetSuppressMode 0
Dim bSTR10 As String
hybridShapeAssemble2.SetDeviation 0.001
bSTR10 = hybridShapeLinePtPt1.Name
hybridShapeAssemble2.SetAngularToleranceMode 0
selection4.Add hybridShapeLinePtPt1
hybridShapeAssemble2.SetAngularTolerance 0.5
Set visPropertySet4 = visPropertySet4.Parent
hybridShapeAssemble2.SetFederationPropagation 0
Dim bSTR11 As String
body1.InsertHybridShape hybridShapeAssemble2
bSTR11 = visPropertySet4.Name
part1.InWorkObject = hybridShapeAssemble2
Dim bSTR12 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR12 = visPropertySet4.Name
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
visPropertySet4.SetShow 1
'' ACTUALIZAMOS Y CERRAMOS EL DOCUMENTO ''
selection4.Clear
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Se actualiza el documento y se cierra la interface
'' SIMETRIA SUPERCIE ''
CATIA.ActiveDocument.Part.Update
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Unload Me
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim reference279 As Reference

205
206
ANEXOS

ANEXO 7. CÓDIGO ALA IZQUIERDA SÓLIDA

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference271 As Reference


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference271 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeLoft2.AddSectionToLoft reference271, 1,
Dim hybridShapeLoft1 As HybridShapeLoft Nothing
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft() Dim reference272 As Reference
hybridShapeLoft1.SectionCoupling = 1 Set reference272 =
hybridShapeLoft1.Relimitation = 1 part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer
hybridShapeLoft1.CanonicalDetection = 2 manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2)
Dim reference268 As Reference
hybridShapeLoft2.AddSectionToLoft reference272, 1,
Set reference268 =
Nothing
part1.CreateReferenceFromObject(hybridShapeLinePtPt1)
body1.InsertHybridShape hybridShapeLoft2
part1.InWorkObject = hybridShapeLoft2
hybridShapeLoft1.AddGuide reference268
part1.Update
Dim reference269 As Reference
CATIA.ActiveDocument.Part.Update
Set reference269 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
ort;MFBRepVersion_CXR15)", sketch1) '' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) ''
hybridShapeLoft1.AddSectionToLoft reference269, 1, '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Nothing
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim reference270 As Reference
Dim hybridShapeFill1 As HybridShapeFill
Set reference270 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill()
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer Dim reference273 As Reference
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2) Set reference273 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
hybridShapeLoft1.AddSectionToLoft reference270, 1, rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
Nothing manentBody;WithoutBuildError;WithSelectingFeatureSupport
body1.InsertHybridShape hybridShapeLoft1 ;MFBRepVersion_CXR15)", sketch1)

part1.InWorkObject = hybridShapeLoft1 hybridShapeFill1.AddBound reference273

part1.Update Dim reference274 As Reference

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference274 =


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
Dim hybridShapeLoft2 As HybridShapeLoft ermanentBody;WithoutBuildError;WithSelectingFeatureSupp
ort;MFBRepVersion_CXR15)", sketch1)
Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft()
hybridShapeFill1.AddBound reference274
hybridShapeLoft2.SectionCoupling = 1
hybridShapeFill1.Continuity = 0
hybridShapeLoft2.Relimitation = 1
body1.InsertHybridShape hybridShapeFill1
hybridShapeLoft2.CanonicalDetection = 2
part1.InWorkObject = hybridShapeFill1

206
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 207

part1.Update '' HIDE SKETCHES & LINES ''


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim hybridShapeFill2 As HybridShapeFill Dim selection1 As Selection
Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill() Set selection1 = partDocument1.Selection
hybridShapeFill2.AddBound reference270 Dim visPropertySet1 As VisPropertySet
hybridShapeFill2.AddBound reference272 Set visPropertySet1 = selection1.VisProperties
hybridShapeFill2.Continuity = 0 Set sketches1 = sketch1.Parent
body1.InsertHybridShape hybridShapeFill2 Dim bSTR1 As String
part1.InWorkObject = hybridShapeFill2 bSTR1 = sketch1.Name
part1.Update selection1.Add sketch1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set visPropertySet1 = visPropertySet1.Parent
'''''''''''
Dim bSTR2 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR2 = visPropertySet1.Name
'''''''''''
Dim reference275 As Reference Dim bSTR3 As String

Set reference275 = bSTR3 = visPropertySet1.Name


part1.CreateReferenceFromObject(hybridShapeLoft1) visPropertySet1.SetShow 1
Dim reference276 As Reference selection1.Clear
Set reference276 = Dim selection2 As Selection
part1.CreateReferenceFromObject(hybridShapeLoft2)
Set selection2 = partDocument1.Selection
Dim hybridShapeAssemble1 As HybridShapeAssemble
Dim visPropertySet2 As VisPropertySet
Set hybridShapeAssemble1 =
hybridShapeFactory1.AddNewJoin(reference275, Set visPropertySet2 = selection2.VisProperties
reference276) Set hybridShapes1 = hybridShapePlaneOffset1.Parent
Dim reference277 As Reference Dim bSTR4 As String
Set reference277 = bSTR4 = hybridShapePlaneOffset1.Name
part1.CreateReferenceFromObject(hybridShapeFill1)
selection2.Add hybridShapePlaneOffset1
hybridShapeAssemble1.AddElement reference277
Set visPropertySet2 = visPropertySet2.Parent
Dim reference278 As Reference
Dim bSTR5 As String
Set reference278 =
part1.CreateReferenceFromObject(hybridShapeFill2) bSTR5 = visPropertySet2.Name
hybridShapeAssemble1.AddElement reference278 Dim bSTR6 As String
hybridShapeAssemble1.SetConnex 1 bSTR6 = visPropertySet2.Name
hybridShapeAssemble1.SetManifold 0 visPropertySet2.SetShow 1
hybridShapeAssemble1.SetSimplify 0 selection2.Clear
hybridShapeAssemble1.SetSuppressMode 0 Dim selection3 As Selection
hybridShapeAssemble1.SetDeviation 0.001 Set selection3 = partDocument1.Selection
hybridShapeAssemble1.SetAngularToleranceMode 0 Dim visPropertySet3 As VisPropertySet
hybridShapeAssemble1.SetAngularTolerance 0.5 Set visPropertySet3 = selection3.VisProperties
hybridShapeAssemble1.SetFederationPropagation 0 Set sketches1 = sketch2.Parent
body1.InsertHybridShape hybridShapeAssemble1 Dim bSTR7 As String
part1.InWorkObject = hybridShapeAssemble1 bSTR7 = sketch2.Name
part1.Update selection3.Add sketch2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set visPropertySet3 = visPropertySet3.Parent
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim bSTR8 As String

207
208
ANEXOS

bSTR8 = visPropertySet3.Name Dim reference280 As Reference


Dim bSTR9 As String Set reference280 =
part1.CreateReferenceFromObject(hybridShapeAssemble1)
bSTR9 = visPropertySet3.Name
closeSurface1.Surface = reference280
visPropertySet3.SetShow 1
part1.UpdateObject closeSurface1
selection3.Clear
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim selection4 As Selection
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set selection4 = partDocument1.Selection
Dim selection5 As Selection
Dim visPropertySet4 As VisPropertySet
Set selection5 = partDocument1.Selection
Set visPropertySet4 = selection4.VisProperties
Dim visPropertySet5 As VisPropertySet
Set hybridShapes1 = hybridShapeLinePtPt1.Parent
Set visPropertySet5 = selection5.VisProperties
Dim bSTR10 As String
Set hybridShapes1 = hybridShapeAssemble1.Parent
bSTR10 = hybridShapeLinePtPt1.Name
Dim bSTR13 As String
selection4.Add hybridShapeLinePtPt1
bSTR13 = hybridShapeAssemble1.Name
Set visPropertySet4 = visPropertySet4.Parent
selection5.Add hybridShapeAssemble1
Dim bSTR11 As String
Set visPropertySet5 = visPropertySet5.Parent
bSTR11 = visPropertySet4.Name
Dim bSTR14 As String
Dim bSTR12 As String
bSTR14 = visPropertySet5.Name
bSTR12 = visPropertySet4.Name
Dim bSTR15 As String
visPropertySet4.SetShow 1
bSTR15 = visPropertySet5.Name
selection4.Clear
visPropertySet5.SetShow 1
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection5.Clear
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'' ALA SOLIDA ''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''ACTUALIZAMOS Y CERRAMOS EL DOCUMENTO ''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim shapeFactory1 As ShapeFactory
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set shapeFactory1 = part1.ShapeFactory
' Se actualiza el documento y se cierra la interface
Dim reference279 As Reference
CATIA.ActiveDocument.Part.Update
Set reference279 = part1.CreateReferenceFromName("")
Unload Me
Dim closeSurface1 As CloseSurface
Set closeSurface1 =
shapeFactory1.AddNewCloseSurface(reference279)

ANEXO 8. CÓDIGO ALA DERECHA SÓLIDA

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' hybridShapeLoft1.SectionCoupling = 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' hybridShapeLoft1.Relimitation = 1
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' hybridShapeLoft1.CanonicalDetection = 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference268 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference268 =
part1.CreateReferenceFromObject(hybridShapeLinePtPt1)
Dim hybridShapeLoft1 As HybridShapeLoft
hybridShapeLoft1.AddGuide reference268
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft()

208
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 209

Dim reference269 As Reference '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Set reference269 = Dim hybridShapeFill1 As HybridShapeFill
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill()
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp Dim reference273 As Reference
ort;MFBRepVersion_CXR15)", sketch1)
Set reference273 =
hybridShapeLoft1.AddSectionToLoft reference269, 1, part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
Nothing rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch1)
Dim reference270 As Reference
hybridShapeFill1.AddBound reference273
Set reference270 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Dim reference274 As Reference
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer Set reference274 =
manentBody;WithoutBuildError;WithSelectingFeatureSupport part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
;MFBRepVersion_CXR15)", sketch2) rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
hybridShapeLoft1.AddSectionToLoft reference270, 1, ermanentBody;WithoutBuildError;WithSelectingFeatureSupp
Nothing ort;MFBRepVersion_CXR15)", sketch1)

body1.InsertHybridShape hybridShapeLoft1 hybridShapeFill1.AddBound reference274

part1.InWorkObject = hybridShapeLoft1 hybridShapeFill1.Continuity = 0

part1.Update body1.InsertHybridShape hybridShapeFill1

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.InWorkObject = hybridShapeFill1

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.Update
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim hybridShapeLoft2 As HybridShapeLoft
Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft() '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

hybridShapeLoft2.SectionCoupling = 1 Dim hybridShapeFill2 As HybridShapeFill

hybridShapeLoft2.Relimitation = 1 Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill()

hybridShapeLoft2.CanonicalDetection = 2 hybridShapeFill2.AddBound reference270


hybridShapeFill2.AddBound reference272
Dim reference271 As Reference
Set reference271 = hybridShapeFill2.Continuity = 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B body1.InsertHybridShape hybridShapeFill2
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer
manentBody;WithoutBuildError;WithSelectingFeatureSupport part1.InWorkObject = hybridShapeFill2
;MFBRepVersion_CXR15)", sketch1) part1.Update
hybridShapeLoft2.AddSectionToLoft reference271, 1, '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Nothing
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim reference272 As Reference
Dim reference275 As Reference
Set reference272 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Set reference275 =
rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer part1.CreateReferenceFromObject(hybridShapeLoft1)
manentBody;WithoutBuildError;WithSelectingFeatureSupport
Dim reference276 As Reference
;MFBRepVersion_CXR15)", sketch2)
Set reference276 =
hybridShapeLoft2.AddSectionToLoft reference272, 1,
part1.CreateReferenceFromObject(hybridShapeLoft2)
Nothing
Dim hybridShapeAssemble1 As HybridShapeAssemble
body1.InsertHybridShape hybridShapeLoft2
Set hybridShapeAssemble1 =
part1.InWorkObject = hybridShapeLoft2
hybridShapeFactory1.AddNewJoin(reference275,
part1.Update reference276)
CATIA.ActiveDocument.Part.Update Dim reference277 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference277 =
part1.CreateReferenceFromObject(hybridShapeFill1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeAssemble1.AddElement reference277
'' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) ''
Dim reference278 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

209
210
ANEXOS

Set reference278 = Dim bSTR5 As String


part1.CreateReferenceFromObject(hybridShapeFill2)
bSTR5 = visPropertySet2.Name
hybridShapeAssemble1.AddElement reference278
Dim bSTR6 As String
hybridShapeAssemble1.SetConnex 1
bSTR6 = visPropertySet2.Name
hybridShapeAssemble1.SetManifold 0
visPropertySet2.SetShow 1
hybridShapeAssemble1.SetSimplify 0
selection2.Clear
hybridShapeAssemble1.SetSuppressMode 0
Dim selection3 As Selection
hybridShapeAssemble1.SetDeviation 0.001
Set selection3 = partDocument1.Selection
hybridShapeAssemble1.SetAngularToleranceMode 0
Dim visPropertySet3 As VisPropertySet
hybridShapeAssemble1.SetAngularTolerance 0.5
Set visPropertySet3 = selection3.VisProperties
hybridShapeAssemble1.SetFederationPropagation 0
Set sketches1 = sketch2.Parent
body1.InsertHybridShape hybridShapeAssemble1
Dim bSTR7 As String
part1.InWorkObject = hybridShapeAssemble1
bSTR7 = sketch2.Name
part1.Update
selection3.Add sketch2
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet3 = visPropertySet3.Parent
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR8 As String
'' HIDE SKETCHES & LINES ''
bSTR8 = visPropertySet3.Name
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR9 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR9 = visPropertySet3.Name
Dim selection1 As Selection
visPropertySet3.SetShow 1
Set selection1 = partDocument1.Selection
selection3.Clear
Dim visPropertySet1 As VisPropertySet
Dim selection4 As Selection
Set visPropertySet1 = selection1.VisProperties
Set selection4 = partDocument1.Selection
Set sketches1 = sketch1.Parent
Dim visPropertySet4 As VisPropertySet
Dim bSTR1 As String
Set visPropertySet4 = selection4.VisProperties
bSTR1 = sketch1.Name
Set hybridShapes1 = hybridShapeLinePtPt1.Parent
selection1.Add sketch1
Dim bSTR10 As String
Set visPropertySet1 = visPropertySet1.Parent
bSTR10 = hybridShapeLinePtPt1.Name
Dim bSTR2 As String
selection4.Add hybridShapeLinePtPt1
bSTR2 = visPropertySet1.Name
Set visPropertySet4 = visPropertySet4.Parent
Dim bSTR3 As String
Dim bSTR11 As String
bSTR3 = visPropertySet1.Name
bSTR11 = visPropertySet4.Name
visPropertySet1.SetShow 1
Dim bSTR12 As String
selection1.Clear
bSTR12 = visPropertySet4.Name
Dim selection2 As Selection
visPropertySet4.SetShow 1
Set selection2 = partDocument1.Selection
selection4.Clear
Dim visPropertySet2 As VisPropertySet
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet2 = selection2.VisProperties
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set hybridShapes1 = hybridShapePlaneOffset1.Parent
'' ALA SOLIDA ''
Dim bSTR4 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR4 = hybridShapePlaneOffset1.Name
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection2.Add hybridShapePlaneOffset1
Dim shapeFactory1 As ShapeFactory
Set visPropertySet2 = visPropertySet2.Parent
Set shapeFactory1 = part1.ShapeFactory

210
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 211

Dim reference279 As Reference selection5.Clear


Set reference279 = part1.CreateReferenceFromName("") '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim closeSurface1 As CloseSurface '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set closeSurface1 = '' SIMETRÍA ''
shapeFactory1.AddNewCloseSurface(reference279)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim reference280 As Reference
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set reference280 =
part1.CreateReferenceFromObject(hybridShapeAssemble1) Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit

closeSurface1.Surface = reference280 Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ

part1.UpdateObject closeSurface1 Dim reference281 As Reference

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference281 =


part1.CreateReferenceFromObject(hybridShapePlaneExplicit2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' )
Dim selection5 As Selection Dim symmetry1 As Symmetry
Set selection5 = partDocument1.Selection Set symmetry1 =
shapeFactory1.AddNewSymmetry2(reference281)
Dim visPropertySet5 As VisPropertySet
Dim hybridShapeSymmetry1 As HybridShapeSymmetry
Set visPropertySet5 = selection5.VisProperties
Set hybridShapeSymmetry1 = symmetry1.HybridShape
Set hybridShapes1 = hybridShapeAssemble1.Parent
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR13 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR13 = hybridShapeAssemble1.Name
'' ACTUALIZAMOS Y CERRAMOS EL
selection5.Add hybridShapeAssemble1 DOCUMENTO ''
Set visPropertySet5 = visPropertySet5.Parent '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR14 As String
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR14 = visPropertySet5.Name ' Se actualiza el documento y se cierra la interface
Dim bSTR15 As String CATIA.ActiveDocument.Part.Update
bSTR15 = visPropertySet5.Name Unload Me
visPropertySet5.SetShow 1

ANEXO 9. CÓDIGO ALAS SÓLIDAS

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference269 As Reference


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference269 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
'' EXTRUSIÓN DEL ALA (SUPERFICIE) '' rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ermanentBody;WithoutBuildError;WithSelectingFeatureSupp
ort;MFBRepVersion_CXR15)", sketch1)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeLoft1.AddSectionToLoft reference269, 1,
Dim hybridShapeLoft1 As HybridShapeLoft Nothing
Set hybridShapeLoft1 = hybridShapeFactory1.AddNewLoft() Dim reference270 As Reference
hybridShapeLoft1.SectionCoupling = 1 Set reference270 =
hybridShapeLoft1.Relimitation = 1 part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.2;1);None:(Limits1:();Limits2:());Cf11:());WithPer
hybridShapeLoft1.CanonicalDetection = 2 manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2)
Dim reference268 As Reference
hybridShapeLoft1.AddSectionToLoft reference270, 1,
Set reference268 =
Nothing
part1.CreateReferenceFromObject(hybridShapeLinePtPt1)
body1.InsertHybridShape hybridShapeLoft1
hybridShapeLoft1.AddGuide reference268

211
212
ANEXOS

part1.InWorkObject = hybridShapeLoft1 hybridShapeFill1.Continuity = 0


part1.Update body1.InsertHybridShape hybridShapeFill1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.InWorkObject = hybridShapeFill1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.Update
Dim hybridShapeLoft2 As HybridShapeLoft '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft() '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
hybridShapeLoft2.SectionCoupling = 1 Dim hybridShapeFill2 As HybridShapeFill
hybridShapeLoft2.Relimitation = 1 Set hybridShapeFill2 = hybridShapeFactory1.AddNewFill()
hybridShapeLoft2.CanonicalDetection = 2 hybridShapeFill2.AddBound reference270
Dim reference271 As Reference hybridShapeFill2.AddBound reference272
Set reference271 = hybridShapeFill2.Continuity = 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer body1.InsertHybridShape hybridShapeFill2
manentBody;WithoutBuildError;WithSelectingFeatureSupport part1.InWorkObject = hybridShapeFill2
;MFBRepVersion_CXR15)", sketch1)
part1.Update
hybridShapeLoft2.AddSectionToLoft reference271, 1,
Nothing '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim reference272 As Reference '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Set reference272 = Dim reference275 As Reference


part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B Set reference275 =
rp:(Sketch.2;2);None:(Limits1:();Limits2:());Cf11:());WithPer part1.CreateReferenceFromObject(hybridShapeLoft1)
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch2) Dim reference276 As Reference
hybridShapeLoft2.AddSectionToLoft reference272, 1, Set reference276 =
Nothing part1.CreateReferenceFromObject(hybridShapeLoft2)
body1.InsertHybridShape hybridShapeLoft2 Dim hybridShapeAssemble1 As HybridShapeAssemble
part1.InWorkObject = hybridShapeLoft2 Set hybridShapeAssemble1 =
hybridShapeFactory1.AddNewJoin(reference275,
part1.Update reference276)
CATIA.ActiveDocument.Part.Update Dim reference277 As Reference
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference277 =
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.CreateReferenceFromObject(hybridShapeFill1)

'' FILL DE LOS EXTREMOS Y JOIN (SUPERFICIE) '' hybridShapeAssemble1.AddElement reference277

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim reference278 As Reference

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set reference278 =


part1.CreateReferenceFromObject(hybridShapeFill2)
Dim hybridShapeFill1 As HybridShapeFill
hybridShapeAssemble1.AddElement reference278
Set hybridShapeFill1 = hybridShapeFactory1.AddNewFill()
hybridShapeAssemble1.SetConnex 1
Dim reference273 As Reference
hybridShapeAssemble1.SetManifold 0
Set reference273 =
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B hybridShapeAssemble1.SetSimplify 0
rp:(Sketch.1;1);None:(Limits1:();Limits2:());Cf11:());WithPer hybridShapeAssemble1.SetSuppressMode 0
manentBody;WithoutBuildError;WithSelectingFeatureSupport
;MFBRepVersion_CXR15)", sketch1) hybridShapeAssemble1.SetDeviation 0.001
hybridShapeFill1.AddBound reference273 hybridShapeAssemble1.SetAngularToleranceMode 0
Dim reference274 As Reference hybridShapeAssemble1.SetAngularTolerance 0.5
Set reference274 = hybridShapeAssemble1.SetFederationPropagation 0
part1.CreateReferenceFromBRepName("WireREdge:(Wire:(B
body1.InsertHybridShape hybridShapeAssemble1
rp:(Sketch.1;142);None:(Limits1:();Limits2:());Cf11:());WithP
ermanentBody;WithoutBuildError;WithSelectingFeatureSupp part1.InWorkObject = hybridShapeAssemble1
ort;MFBRepVersion_CXR15)", sketch1)
part1.Update
hybridShapeFill1.AddBound reference274

212
Fundamentos de programación de VBA en Catia V5: Aplicación al diseño paramétrico de perfiles y
alas NACA de 4 dígitos 213

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Set visPropertySet3 = visPropertySet3.Parent


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim bSTR8 As String
'' HIDE SKETCHES & LINES '' bSTR8 = visPropertySet3.Name
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim bSTR9 As String
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' bSTR9 = visPropertySet3.Name
Dim selection1 As Selection visPropertySet3.SetShow 1
Set selection1 = partDocument1.Selection selection3.Clear
Dim visPropertySet1 As VisPropertySet Dim selection4 As Selection
Set visPropertySet1 = selection1.VisProperties Set selection4 = partDocument1.Selection
Set sketches1 = sketch1.Parent Dim visPropertySet4 As VisPropertySet
Dim bSTR1 As String Set visPropertySet4 = selection4.VisProperties
bSTR1 = sketch1.Name Set hybridShapes1 = hybridShapeLinePtPt1.Parent
selection1.Add sketch1 Dim bSTR10 As String
Set visPropertySet1 = visPropertySet1.Parent bSTR10 = hybridShapeLinePtPt1.Name
Dim bSTR2 As String selection4.Add hybridShapeLinePtPt1
bSTR2 = visPropertySet1.Name Set visPropertySet4 = visPropertySet4.Parent
Dim bSTR3 As String Dim bSTR11 As String
bSTR3 = visPropertySet1.Name bSTR11 = visPropertySet4.Name
visPropertySet1.SetShow 1 Dim bSTR12 As String
selection1.Clear bSTR12 = visPropertySet4.Name
Dim selection2 As Selection visPropertySet4.SetShow 1
Set selection2 = partDocument1.Selection selection4.Clear
Dim visPropertySet2 As VisPropertySet '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set visPropertySet2 = selection2.VisProperties '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set hybridShapes1 = hybridShapePlaneOffset1.Parent '' ALA SOLIDA ''
Dim bSTR4 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR4 = hybridShapePlaneOffset1.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection2.Add hybridShapePlaneOffset1 Dim shapeFactory1 As ShapeFactory
Set visPropertySet2 = visPropertySet2.Parent Set shapeFactory1 = part1.ShapeFactory
Dim bSTR5 As String Dim reference279 As Reference
bSTR5 = visPropertySet2.Name Set reference279 = part1.CreateReferenceFromName("")
Dim bSTR6 As String Dim closeSurface1 As CloseSurface
bSTR6 = visPropertySet2.Name Set closeSurface1 =
shapeFactory1.AddNewCloseSurface(reference279)
visPropertySet2.SetShow 1
Dim reference280 As Reference
selection2.Clear
Set reference280 =
Dim selection3 As Selection part1.CreateReferenceFromObject(hybridShapeAssemble1)
Set selection3 = partDocument1.Selection closeSurface1.Surface = reference280
Dim visPropertySet3 As VisPropertySet part1.UpdateObject closeSurface1
Set visPropertySet3 = selection3.VisProperties '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set sketches1 = sketch2.Parent '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR7 As String Dim selection5 As Selection
bSTR7 = sketch2.Name Set selection5 = partDocument1.Selection
selection3.Add sketch2
Dim visPropertySet5 As VisPropertySet

213
214
ANEXOS

Set visPropertySet5 = selection5.VisProperties '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


Dim hybridShapePlaneExplicit2 As HybridShapePlaneExplicit
Set hybridShapes1 = hybridShapeAssemble1.Parent Set hybridShapePlaneExplicit2 = originElements1.PlaneYZ
Dim bSTR13 As String Dim reference281 As Reference
bSTR13 = hybridShapeAssemble1.Name Set reference281 =
part1.CreateReferenceFromObject(hybridShapePlaneExplicit2
selection5.Add hybridShapeAssemble1 )
Set visPropertySet5 = visPropertySet5.Parent Dim mirror1 As Mirror
Dim bSTR14 As String Set mirror1 = shapeFactory1.AddNewMirror(reference281)
bSTR14 = visPropertySet5.Name '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim bSTR15 As String '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
bSTR15 = visPropertySet5.Name '' ACTUALIZAMOS Y CERRAMOS EL DOCUMENTO ''
visPropertySet5.SetShow 1 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
selection5.Clear '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Se actualiza el documento y se cierra la interface
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' CATIA.ActiveDocument.Part.Update
'' MIRROR '' Unload me
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

214

También podría gustarte