Tips to switch from C.O.F.F.E.E to PythonΒΆ

Tips to switch from C.O.F.F.E.E to Python

As you may know, R20 drop the support of C.O.F.F.E.E, read The End of C.O.F.F.E.E for more information.
Even if our role is not to teach you python, we can at least help you to convert C.O.F.F.E.E script to Python by giving you some tips.
First of all, you can find some valuable python resource to learn in the following blog post Public Resources for Cinema 4D Plugin Development in Python.

This list is not exhaustive and if you find any difficulties you can contact us in the forum or even by mail: sdk_support@maxon.net.

C.O.F.F.E.E

Python


GetPrev
GetPred

Math functions Math functions

In python there is no math class from c4d module. But you can found corresponding functions in standard python math module or in c4d.utils module


Cos Sin
println (cos(75));
println (sin(50));
Cos Sin

There is multiples way to get Sin Con in Python.
First, using the c4d modules get both at once.

# Get Both at once
sin, cos = c4d.utils.SinCos(90)
print sin, cos
You can also generate lambda helper
cos = lambda x: c4d.utils.SinCos(x)[1]
sin = lambda x: c4d.utils.SinCos(x)[0]
     
print cos(75)
print sin(50)
Finally, you can use the standard python math module

#Using math module
import math

print math.cos(75)
print math.sin(50)

exp example
println(exp(10));
exp example
import math
print math.exp(10)

MinimizeAngle
var v1 = vector(50, 20, 30);
var v2 = vector(-400, 20, 30);
println(MinimizeAngle(v1, v2));
GetOptimalAngle

In python, MinimizeAngle is renamed by GetOptimalAngle

v1 = c4d.Vector(50, 20, 30)
v2 = c4d.Vector(-400, 20, 30)
print c4d.utils.GetOptimalAngle(v1, v2, c4d.ROTATIONORDER_DEFAULT)

Matrix Acces

GetV0, GetV1, GetV2, GetV3

var m = op->GetMg();
var pos = m->GetV0();
var xAxis = m->GetV1();
var yAxis = m->GetV2();
var zAxis = m->GetV3();
     
println(pos, xAxis, yAxis, zAxis);
Matrix Acces

I also suggest to read Matrix Fundamentals off, v1, v2, v3

m = op.GetMg()
pos = m.off
xAxis = m.v1
yAxis = m.v2
zAxis = m.v3
 
print pos, xAxis, yAxis, zAxis

GetHPB
var m = op->GetMg();
var hpbRot = m->GetHBP();
 
println(hpbRot);
MatrixToHPB
m = op.GetMg()
hpbRot = c4d.utils.MatrixToHPB(m)
 
print hpbRot

Noise class

Turbulence example

var noise = new(Noise);
var jitter = 10;
var x = 20;
var y = 30;
var z = 40;
var absolute= FALSE;
 
println(noise->Turbulence(jitter, absolute, x ,y, z));
C4DNoise Class

Turbulence example

noise = c4d.utils.noise.C4DNoise()
jitter = 10
x = 20
y = 30
z = 40
absolute= False
     
print(noise.Turbulence(c4d.Vector(x, y, z), jitter, absolute))

Random class
var r = new(Random);
r->Init(8374946);
 
println(r->Get01());
println(r->Get11());
println(r->GetG01());
println(r->GetG11());
Random class

In python, there is no Random class from c4d module, but you can find the corresponding function in standard python random module.
Then keep in mind even using the same seed.
Results will be different from C.O.F.F.E.E to Python.

import random
r.seed(8374946)
 
print random.uniform(0, 1) # Equals to Get01
print random.uniform(-1, 1)  # Equals to Get11
print random.gauss(0.5, 0.09) # Equals to GetG01
print random.gauss(0.0, 0.18) # Equals to GetG11