TFG Franciscojavierjimenezcalvo PDF
TFG Franciscojavierjimenezcalvo PDF
TFG Franciscojavierjimenezcalvo PDF
Autor:
Francisco Javiér Jiménez Calvo
Tutora:
Cristina Torrecillas Lozano
Contratada Doctora
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
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2015
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.
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
xix
Índice de Figuras
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
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.
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
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]
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]
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
( 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]
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]):
5
6 Introducción
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
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]
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.
Capturar el conocimiento de la ingeniería como especificaciones que permiten dar a la aplicación una
consistencia completa.
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.
En la Tabla 1 se detallan las diferentes herramientas así como una breve explicación de para que se utilizan.
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.
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.
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
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]
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.
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.
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.
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]
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
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 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:
Las Keywords que son las estructuras básicasde las que disponemos para construir la regla.
Referencia [8]
13
14 Introducción
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
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.
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.
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
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.
Código 1. Cotas en longitud de los puntos del extradós del perfil del encastre
Código 2. Cotas en altura de los puntos del extradós del perfil del encastre
17
18 Introducción
Código 3. Cotas en longitud de los puntos del intradós del perfil del encastre
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.
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
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.
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.
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.
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.
Código 5. Cotas en altura de los puntos del extradós del perfil de la punta del ala
Código 6. Cotas en longitud de los puntos del extradós del perfil de la punta del ala
21
22 Introducción
Código 7. Cotas en longitud de los puntos del intradós del perfil de la punta del ala
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
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.
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
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]
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:
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.
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
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.
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]
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
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.
Referencia [10]
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:
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
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.
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.
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.
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]
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
A continuación vamos a explicar otros conceptos que convienen resaltar antes de comenzar a programar.
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:
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.
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.
Donde el comando Set se usa para asociar la variable definida con un objeto.
Referencia [9]
Select1.Search(“name=’Optimization.MinimumValue’,all”)
Referencia [9]
Son una secuencia de estados que conforman la operación deseada. Esta operación viene especificada en una
función.
La diferencia entre function y sub es que mientras la primera te devuelve un valor, la segunda no.
Referencia [9]
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
If [condición] Then
[Estamento]
Elself [condición] Then
[Estamento de Elself]
Else
[Estamento de Else]
End If
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.
Contador
For [contador] = [inicio] To [end] {paso a paso}
[Estamentos]
Next
2. While … Wend: se utiliza cuando iteramos hasta que el contador cumple cierta condición.
Contador
While [{Contador} Condición]
[Estamentos]
Wend
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]
4. For each … Next: se utiliza cuando se quiere iterar sobre los objetos en una determinada colección.
Referencia [9]
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:
d. Devolver resultados de los cálculos usando tanto la información introducida externamente como
de la contenida en el objeto
Referencia [9]
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
Referencia [9]
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.
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.
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.
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
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.
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
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.
3. El módulo Wireframe and Surface Design para crear superficies en 3D a través de Sketches.
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.
41
42
Herramientas de programación de perfiles y alas
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.
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].
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
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
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.
line2D1.ReportName = 1
Dim line2D2 As Line2D
Set line2D2 = axis2D1.GetItem("VDirection")
line2D2.ReportName = 2
sketch1.CloseEdition
part1.InWorkObject = sketch1
part1.Update
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.
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
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]
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.
45
46
Herramientas de programación de perfiles y alas
point2D1.Construction = False
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]
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.
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
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.
controlPoint2D1.ReportName=3
controlPoint2D2.ReportName=4
controlPoint2D3.ReportName=5
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
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.
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
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:
Constraints1.Mode = CatCstModeDrivingDimension
2. Modo Measurement: el valor solo refleja aquello que puede ser observado desde dicha posición.
Constraints1.Mode = CatCstModeDrivenDimension
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.
constraint4.Mode = catCstModeDrivingDimension
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.
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
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.
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.
constraint10.Mode = catCstModeDrivingDimension
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
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.
3.4 CATPART
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
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
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.
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
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]
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
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
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
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.
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.
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.
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.
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
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]
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.
hybridBody1.AppendHybridShape Fill
part1.InWorkObject = Fill
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
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.
hybridShapeLoft1.SectionCoupling = 1
hybridShapeLoft1.Relimitation = 1
hybridShapeLoft1.CanonicalDetection = 2
body1.InsertHybridShape hybridShapeLoft1
part1.InWorkObject = hybridShapeLoft1
part1.Update
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.
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.
hybridBody1.AppendHybridShape Join
part1.InWorkObject = Join
part1.Update
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]
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.
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.
3.5 KNOWLEDGEWARE
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.
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.
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:
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
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
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]
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.
Para activar las fórmulas se deberá escribir previamente el Código 49 para poder trabajar con ellas.
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
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.
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
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.
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)))))"
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.
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
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.
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
Load NombreUserform
Unload Me
NombreUserform.Show
End Sub
Código 53. Llamada a los UserForms con un CommandButton
Unload Me
End Sub
Código 54. Salir del programa con un CommandButton
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
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.
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
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.
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
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.
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
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.
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.
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
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
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
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.
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
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.
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.
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.
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.
[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
[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)
[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
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
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.
89
90
ANEXOS
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.
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]
Una vez realizado todos los pasos explicados ya tenemos CATIA correctamente configurado.
91
92
ANEXOS
' 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."
' NACA1 debe ser un número entero positivo de una cifra Dim Cuerda As Parameter
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
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
95
96
ANEXOS
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
97
98
ANEXOS
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
99
100
ANEXOS
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
101
102
ANEXOS
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
103
104
ANEXOS
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
105
106
ANEXOS
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
constraint120.Mode = catCstModeDrivingDimension ''' Acotamos el control point del borde de ataque '''
107
108
ANEXOS
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
109
110
ANEXOS
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
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
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
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
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
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
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
123
124
ANEXOS
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
' 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
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
127
128
ANEXOS
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
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
129
130
ANEXOS
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
131
132
ANEXOS
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
133
134
ANEXOS
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
135
136
ANEXOS
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
137
138
ANEXOS
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
139
140
ANEXOS
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
141
142
ANEXOS
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
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
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
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
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
151
152
ANEXOS
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
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
157
158
ANEXOS
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
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
161
162
ANEXOS
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
163
164
ANEXOS
' posteriormente para crear la linea que define la extrusión. constraint129.Mode = catCstModeDrivingDimension
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
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
167
168
ANEXOS
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
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
169
170
ANEXOS
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
171
172
ANEXOS
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
173
174
ANEXOS
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
175
176
ANEXOS
' 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
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
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
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
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
185
186
ANEXOS
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
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
191
192
ANEXOS
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
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
195
196
ANEXOS
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
197
198
ANEXOS
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
199
200
ANEXOS
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
201
202
ANEXOS
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
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 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)
203
204
ANEXOS
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
205
206
ANEXOS
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
207
208
ANEXOS
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 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
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' part1.Update
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim hybridShapeLoft2 As HybridShapeLoft
Set hybridShapeLoft2 = hybridShapeFactory1.AddNewLoft() '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
209
210
ANEXOS
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
211
212
ANEXOS
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
213
214
ANEXOS
214