Next: Macro 'OuterPlunger'
Up: Using macros to model
 Previous: Using macros to model
 
 Since the two plungers are at different angles, and their radial positions
 are to be changed, we parameterize our macro with arguments.
 We define a macro 'InnerPlunger' that expects two arguments:
 The first argument is the radius where the plunger shall be placed,
 and the second argument is the angle of the axis of the plunger:
 #
 # a plunger
 #
 macro InnerPlunger
    define(PlungerRadius0, @arg1               )  # Argument of the call
    define(PlungerAngle,   eval(@arg2*@pi/180) )  # Argument of the call
    define(PlungerInnerRadius, eval(100e-3/2) )
    define(PlungerCurvature, 16e-3)
    -gbor
        material= 10
        origin= (eval(cos(PlungerAngle)*PlungerRadius0),\
                 eval(sin(PlungerAngle)*PlungerRadius0),\
                 0)
        zprimedirection= (eval(-cos(PlungerAngle)*PlungerRadius0),\
                          eval(-sin(PlungerAngle)*PlungerRadius0),\
                          0)
        rprimedirection= (0,0,1)
        range= (0,360)
        clear
           # point= (z,r)
        point= (0,0)
        point= (0, eval(PlungerInnerRadius-PlungerCurvature) )
           arc, radius= PlungerCurvature, size= small, type= counterclockwise
        point= (eval(-PlungerCurvature), PlungerInnerRadius)
        point= (-170e-3, PlungerInnerRadius)
        point= (-170e-3, 0)
        doit
 endmacro # InnerPlunger