mmf
Class MMF_TrapModeSmoothProductAbove

Object
  extended by common:Generic
      extended by common:TrapMode
          extended by common:TrapModeWithThreshold
              extended by mmf:MMF_TrapModeSmoothWithThreshold
                  extended by mmf:MMF_TrapModeSmoothProductAbove

class 
MMF_TrapModeSmoothWithThreshold:MMF_TrapModeSmoothProductAbove

Note that this implimentation is slightly different to normal TrapModeProduct in that IterationPoints is kept as a trap counter and TransformedPoints and UntransformedPoints are initialised to 1 and multiplied by (1 + pz/cabs(pz)) and (1 + pzt/cabs(pzt)) respectively.


Ultra Fractal Source

Toggle UF Source Code Display

 class MMF_TrapModeSmoothProductAbove(MMF_TrapModeSmoothWithThreshold) {
 ;
 ; Note that this implimentation is slightly different to normal
 ; TrapModeProduct in that IterationPoints is kept as a trap counter
 ; and TransformedPoints and UntransformedPoints are initialised to
 ; 1 and multiplied by (1 + pz/cabs(pz)) and (1 + pzt/cabs(pzt))
 ; respectively.<br>
 ;
 public:
   import "common.ulb"
 
   func MMF_TrapModeSmoothProductAbove(Generic pparent)
     MMF_TrapModeSmoothWithThreshold.MMF_TrapModeSmoothWithThreshold(pparent)
   endfunc
   
   func Init(complex pz)
     m_Iterations = 0
     m_Solid = true
     int j = 3
      repeat
       m_UntransformedPoints[j] = m_OldUntransformedPoints[j] = (1,0)
       m_TransformedPoints[j] = m_OldTransformedPoints[j] = (1,0)
        m_IterationPoints[j] = m_OldIterationPoints[j] = 0
        m_Distances[j] = m_OldDistances[j] = 1.0
       m_Textures[j] = m_OldTextures[j] = 1.0
      until  (j=j-1)<0
      m_wastrapped = false
   endfunc
   
   func Iterate(complex pz, complex pzt, float pdistance, float ptexture)
     MMF_TrapModeSmoothWithThreshold.Iterate(pz, pzt, pdistance, ptexture)
     pdistance = pdistance - @p_testdist
     if pdistance>=0 && pdistance < m_Threshold
       float id = 1.0 / m_Threshold
       m_Distances[0] = m_Distances[0] * (pdistance + @adjust) * id
       m_Textures[0] = m_Textures[0] * ptexture * id
       m_UntransformedPoints[0] = m_UntransformedPoints[0] \
                                  * (1.0 + pz / cabs(pz))
       m_TransformedPoints[0] = m_TransformedPoints[0] \
                                * (1.0 + pzt / cabs(pzt))
       m_IterationPoints[0] = m_IterationPoints[0] + 1
       m_Solid = false
       m_wastrapped = true
     endif
   endfunc
   
   func OldResult()
     if m_OldIterationPoints[0]>0
        m_Distances[0] = m_OldDistances[0]
       m_Textures[0] = m_OldTextures[0]
       m_UntransformedPoints[0] = m_OldUntransformedPoints[0]
        m_TransformedPoints[0] = m_OldTransformedPoints[0]
       m_IterationPoints[0] = m_OldIterationPoints[0]
       m_Iterations = m_Iterations - 1
     endif
   endfunc
 
 default:
   title = "Smooth Product Above"
   heading
     text = "Note that this implimentation is slightly different to \
             normal Trap Mode Product in that the Iteration value is \
             kept as a trap counter and TransformedPoints and \
             UntransformedPoints will actually produce values when \
             using an appropriate Trap Color Mode such as Magnitude, \
             Real or Imaginary etc."
   endheading
   float param adjust
     caption = "Offset Distance"
     default = 0.0
     hint = "Modifies the distances found by this value before \
             multiplying. Try non-zero values if you get little \
             or no colouring variation, note that often increases \
             in the Trap Threshold will require increases in this \
             value and vice-versa."
   endparam
   float param p_testdist
     caption = "Trap Test Distance"
     default = 0.5
     hint = "Multiplies the results of distances from this distance \
             from the trap."
   endparam
 }
 


Constructor Summary
MMF_TrapModeSmoothProductAbove()
           
MMF_TrapModeSmoothProductAbove(Generic pparent)
           
 
Method Summary
 void Init(complex pz)
          call this at the beginning of each sequence
 void Iterate(complex pz, complex pzt, float pdistance, float ptexture)
          call this for each point
 void OldResult()
          call this to compute penultimate results
 
Methods inherited from class mmf:MMF_TrapModeSmoothWithThreshold
IterateSilent
 
Methods inherited from class common:TrapModeWithThreshold
GetThreshold, SetThreshold, UsesThreshold
 
Methods inherited from class common:TrapMode
GetDistance, GetIteration, GetTexture, GetTransformedPoint, GetUntransformedPoint, IsSolid, Result
 
Methods inherited from class common:Generic
GetParent
 
Methods inherited from class Object
 

Constructor Detail

MMF_TrapModeSmoothProductAbove

public MMF_TrapModeSmoothProductAbove(Generic pparent)

MMF_TrapModeSmoothProductAbove

public MMF_TrapModeSmoothProductAbove()
Method Detail

Init

public void Init(complex pz)
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this at the beginning of each sequence

Overrides:
Init in class MMF_TrapModeSmoothWithThreshold
Parameters:
pz - the initial z value

Iterate

public void Iterate(complex pz,
                    complex pzt,
                    float pdistance,
                    float ptexture)
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this for each point

Note that derived functions should always copy all used parameters to the "old" versions when they are changed as here.

m_wastrapped should be set to true in the derived function when the main (current) values get changed

Overrides:
Iterate in class MMF_TrapModeSmoothWithThreshold
Parameters:
pz - the z value
pzt - the transformed z value
pdistance - the trap distance
ptexture - tyhe texture value

OldResult

public void OldResult()
Description copied from class: MMF_TrapModeSmoothWithThreshold
call this to compute penultimate results

This should only be called after previously calling Result() and getting the actual result value using the Trap Color Mode since the original result values are destroyed by this call.

Overrides:
OldResult in class MMF_TrapModeSmoothWithThreshold