# Cookbook

## Unsorted

```python
# Get Active Object
obj = doc.GetActiveObject
```

## Matrix Array Transformation

#### Theory

### Position

**Selecting a single element**

```python
n = 20

# Position: Vector to Real
x = marr[n].off.x 
y = 20
z = marr[n].off.z

marr[n].off = c4d.Vector(x,y,z)
```

**Selecting a single element**

```python
for i in range(cnt):
  x = marr[i].off.x 
  y = 20+i*5
  z = marr[i].off.z
  
marr[i].off = c4d.Vector(x,y,z)
```

### Rotation

#### Single Axis

```python

rot_x = c4d.utils.MatrixRotX(c4d.utils.Rad(45))
rot_y = c4d.utils.MatrixRotY(c4d.utils.Rad(30))
rot_z = c4d.utils.MatrixRotZ(c4d.utils.Rad(45))

marr[6] *= rot_x
   
```

#### Multiple Axes with HPB to Matrix

```python
r_x = c4d.utils.Rad(11)
r_y = 0
r_z = c4d.utils.Rad(18)

vect = c4d.Vector(r_x, r_y, r_z)
rotation = c4d.utils.HPBToMatrix(vect,5)

marr[6] *= rotation
```

### Scale

```python
for i in range(cnt):
    x = random.uniform(0.2,1) 
    y = random.uniform(0.2,1)
    z = random.uniform(0.2,1)
    vect = c4d.Vector(x,y,z)
  #  marr[i].Scale(float(i/10))
    marr[i].Scale(vect)
```

## Color

<pre class="language-python"><code class="lang-python">carr = moData.GetArray(c4d.MODATA_COLOR) # Color Array
<strong>
</strong><strong># Gray Scale
</strong># carr[0] = c4d.Vector(0.5) 

for i in range(cnt):
    r = random.random()
    g = random.random() 
    b = random.random()
    carr[i] = c4d.Vector(r,g,b)
    
# Update Color Array
moData.SetArray(c4d.MODATA_COLOR, carr, hasField)

</code></pre>

## References

* C4D SDK Documentation
*
* [Cinema 4D Python Bytes](https://www.youtube.com/playlist?list=PLpss88MSwvy5-a_RU1kHJtDcflY57VW7F)
* [Cinema4D Python SDK](https://developers.maxon.net/docs/Cinema4DPythonSDK/html/manuals/introduction/python_script_manager.html)

[C4D Python SDK Extended Github, Plugin Cafe](https://github.com/PluginCafe/cinema4d_py_sdk_extended)<https://github.com/aturtur/cinema4d-scripts>

##

## Formula

Documentation

**Alternate intensity based on row number (Animate over time)**

```jsx
mod((id/5);2)?(t;-t)
```

**Animate over time based on the row number sequence**

```jsx
(id/5)/(count/5)*1.5*t
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nosleepcreative.com/cinema-4d/cookbook.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
