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: [email protected].
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
|
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
|