# Create a launcher satellite

This script creates a launcher satellite

```
#
# newFASANT script file
#
# Creates the launcher represented in Launcher.png,
# with the following specifications:
# L1: Height of 1st part (cylindrical), in Z dimension
# L2: Height of 2nd part (conical), in Z dimension
# L3: Height of 3rd part (cylindrical), in Z dimension
# L4: Height of 4th part (conical), in Z dimension
# L5: Height of 5th part (cylindrical), in Z dimension
# L6: Height of 6th part (spherically blunted tangent ogive), in Z dimension
# L7: Height of secondary bodies, 1st part (cylindrical), in Z dimension
# L8: Height of secondary bodies, 2nd part (tangent ogive), in Z dimension
# d: separation between main and secondary bodies, in X dimension
# R1: Radius of 1st cylindrical part, in XY dimensions
# R2: Radius of 2nd cylindrical part, in XY dimensions
# R3: Radius of 3rd cylindrical part, in XY dimensions
# R4: Radius of the spherical end of the top ogive, in XY dimensions
# R5: Radius of secondary bodies, 1st cylindrical part, in XY dimensions
# R6: Radius of transversal cylinders, in Z dimension
#
# See image Launcher.png for further information
#
# Parameters with fixed values
set L1 {9.0}
set L2 {2.0}
set L3 {12.0}
set L4 {1.5}
set L5 {2.5}
set L6 {1.75}
set L7 {8.0}
set L8 {1.5}
set d {0.15}
set R1 {1.4}
set R2 {1.0}
set R3 {1.25}
set R4 {0.25}
set R5 {0.75}
set R6 {0.25}
#
# Auxiliary parameters defined automatically
set $1 = -(L1+L2+L3+L4+L5+L6)/2.0
set $2 = L1-(L1+L2+L3+L4+L5+L6)/2.0
set $3 = L1+L2-(L1+L2+L3+L4+L5+L6)/2.0
set $4 = L1+L2+L3-(L1+L2+L3+L4+L5+L6)/2.0
set $5 = L1+L2+L3+L4-(L1+L2+L3+L4+L5+L6)/2.0
set $6 = L1+L2+L3+L4+L5-(L1+L2+L3+L4+L5+L6)/2.0
set $7 = R1+d+R5
set $8 = L7-(L1+L2+L3+L4+L5+L6)/2.0
set $9 = -(R1+d+R5)
set $10 = 0.25*L7-(L1+L2+L3+L4+L5+L6)/2.0
set $11 = R1/2.0
set $12 = d+(R1+R6)/2.0
set $13 = 0.75*L7-(L1+L2+L3+L4+L5+L6)/2.0
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height)
# It creates the first cylinder of the main body, starting from the lower part
cylinder -c -n MainCylinder1 -p 0.0 0.0 $1 R1 L1
#
# Cone primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, bottom radius,
# height, top radius)
# It creates the second section of the main body, which is placed on the
# previous cylinder
cone -c -n MainCone2 -p 0.0 0.0 $2 R1 L2 R2
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height)
# It creates the second cylinder of the main body, which is placed on the
# previous cone
cylinder -c -n MainCylinder3 -p 0.0 0.0 $3 R2 L3
#
# Cone primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, bottom radius,
# height, top radius)
# It creates the fourth section of the main body, which is placed on the
# previous cylinder
cone -c -n MainCone4 -p 0.0 0.0 $4 R2 L4 R3
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height)
# It creates the last cylinder of the main body, which is placed on the
# previous cone
cylinder -c -n MainCylinder5 -p 0.0 0.0 $5 R3 L5
#
# Ogive primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, bottom radius, height,
# and top radius of the spherical head)
# It creates the top of spherically blunted tangent ogive of the main body,
# which is placed on the previous cone
ogive -c -n MainOgive6 -p 0.0 0.0 $6 R3 L6 R4
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the first cylinder with the first cone
booleanXOR -s -objectA MainCylinder1 -objectB MainCone2 -n MainBody1
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the last object with the next cylinder
booleanXOR -s -objectA MainBody1 -objectB MainCylinder3 -n MainBody2
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the last object with the next cone
booleanXOR -s -objectA MainBody2 -objectB MainCone4 -n MainBody3
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the last object with the last cylinder
booleanXOR -s -objectA MainBody3 -objectB MainCylinder5 -n MainBody4
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the last object with the ogive at the top
# The main body is obtained
booleanXOR -s -objectA MainBody4 -objectB MainOgive6 -n MainBody5
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height)
# It creates the right cylinder (positive X side)
cylinder -c -n RightCylinder -p $7 0.0 $1 R5 L7
#
# Ogive primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, bottom radius, height,
# and top radius of the spherical head)
# It creates the right tangent ogive (positive X side)
ogive -c -n RightOgive -p $7 0.0 $8 R5 L8 0.0
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the right elements (positive X side)
booleanXOR -s -objectA RightCylinder -objectB RightOgive -n RightBody
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height)
# It creates the left cylinder
cylinder -c -n LeftCylinder -p $9 0.0 $1 R5 L7
#
# Ogive primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, bottom radius, height,
# and top radius of the spherical head)
# It creates the left tangent ogive
ogive -c -n LeftOgive -p $9 0.0 $8 R5 L8 0.0
#
# Exclusive Union of two objects: the common surfaces are removed
# It joins the left elements
booleanXOR -s -objectA LeftCylinder -objectB LeftOgive -n LeftBody
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height);
# and the transformation matrix that set its orientation.
# It creates the left-lower transversal cylinder
cylinder -c -n TransversalCylinder1 -p 0.0 $10 $11 R6 $12 \
-t 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height);
# and the transformation matrix that set its orientation.
# It creates the left-upper transversal cylinder
cylinder -c -n TransversalCylinder2 -p 0.0 $13 $11 R6 $12 \
-t 0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height);
# and the transformation matrix that set its orientation.
# It creates the left-lower transversal cylinder
cylinder -c -n TransversalCylinder3 -p $10 0.0 $11 R6 $12 \
-t 0.0 0.0 -1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
#
# Cylinder primitive (-c: closed), specified by the name of resulting object;
# and its geometric parameters (-p) (base center X Y Z, radius, height);
# and the transformation matrix that set its orientation.
# It creates the left-upper transversal cylinder
cylinder -c -n TransversalCylinder4 -p $13 0.0 $11 R6 $12 \
-t 0.0 0.0 -1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0
#
# Boolean Union of two objects: the common regions are obtained
# It provides the final launcher body
booleanUnion -s -objectA TransversalCylinder1 TransversalCylinder2 TransversalCylinder3 TransversalCylinder4 -objectB MainBody5 LeftBody RightBody -n Launcher
```