C4D中使用python脚本1

news2024/11/27 6:24:56

学习视频链接

关于C4D与Python那些事_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1et411172W/

目录

一、简单用法

二、C4D包

2.1 vector 矢量

2.2 矩阵

2.3 用脚本创建对象

2.4 几何体结构

三、制作效果

3.1 洗牌

3.2 后面的项目单独开文章


一、简单用法

在 C4D 的 扩展 下拉选项中,打开 控制台脚本管理器,在脚本管理器中编写的代码,就可以在控制台中输出信息

python 的基础语法就跳过了,在 py 文件中引入 C4D 包,我们就能对 C4D 进行操作了

二、C4D包

2.1 vector 矢量

1、初始化

2、相加、数乘和数除

3、标准化

4、点乘和叉乘

5、获取向量长度

 一个是开方的结果,一个是不开方的结果

标准化~c 等同于 c/c.GetLength()

2.2 矩阵

2.3 用脚本创建对象

1、新建球体 

2、给球体加标签

3、修改属性

先把属性拖过来

进行一些修改 

 其他属性

 

4、层级关系

变换插入的顺序是 s.InsertUnderLast(pn) 

5、建立后修改名字

6、塌陷物体

import c4d
from c4d import utils

def c2o(o):
    r = utils.SendModelingCommand(
        command = c4d.MCOMMAND_CURRENTSTATETOOBJECT,
        list = [o],
        mode = c4d.MODELINGCOMMANDMODE_ALL,
        doc = doc)
    return r[0]

def main():
    # 创建空白对象
    s = c4d.BaseObject(5160)
    s[c4d.PRIM_SPHERE_TYPE] = 4
    
    s2 = c2o(s)
    
    doc.InsertObject(s2)
    c4d.EventAdd()

main()

2.4 几何体结构

1、判断几何体结构

也可以换一种写法,get类型,这个也是比较重要

2、获取几何体包含的所有点

3、获取选择了的点

import c4d

def main():
    a = doc.GetActiveObject()
    # 判断是否选中的物体
    if (a == None):
        print("没有选中物体")
        return
    if (a.GetType() != 5100):
        print("选中的是:" + str(a.GetType()) + "不是5100")
        return

    pl = a.GetAllPoints()
    sel = a.GetPointS( )
    spl = []
    for i, p in enumerate(pl):
        if (sel.IsSelected(i) == True):
            spl.append(pl[i])
    print(spl)

main()

4、生成曲线 

import c4d

def main():
    # 创建贝塞尔曲线
    # 传入参数:两个点、线性插值
    s = c4d.SplineObject(2, c4d.SPLINETYPE_LINEAR)
    
    s[c4d.SPLINEOBJECT_TYPE] = 0
    s[c4d.SPLINEOBJECT_CLOSED] = False
    s[c4d.SPLINEOBJECT_INTERPOLATION] = 0
    
    # 两个点在第0分段里面
    s.ResizeObject(2, 1)
    
    # 第0个分段有两个点,不封闭
    s.SetSegment(0, 2, False)
    
    pl = [c4d.Vector(0), c4d.Vector(200)]
    s.SetAllPoints(pl)
    
    # 生成
    s.Message(c4d.MSG_UPDATE)
    
    doc.InsertObject(s)
    c4d.EventAdd()

main()

5、模块化代码

import c4d

# 生成曲线
def makeSpline(pl, closed = False):
    pc = len(pl)
    s = c4d.SplineObject(pc, c4d.SPLINETYPE_LINEAR)
    s[c4d.SPLINEOBJECT_TYPE] = 0
    s[c4d.SPLINEOBJECT_CLOSED] = closed
    s[c4d.SPLINEOBJECT_INTERPOLATION] = 0

    s.ResizeObject(pc, 1)    
    s.SetSegment(0, pc, closed)
    s.SetAllPoints(pl)
    s.Message(c4d.MSG_UPDATE)
    
    return s


def main():
    pl = [c4d.Vector(0), c4d.Vector(100, 0, 0), c4d.Vector(200)]
    s = makeSpline(pl)
        
    doc.InsertObject(s)
    c4d.EventAdd()

main()

6、创建面片

import c4d

# 生成面
def makePoly(pl, fl):
    pc = len(pl)  # 点数量
    fc = len(fl)    # 面数量
    
    a = c4d.PolygonObject(pc, fc)
    for i in range(fc):    # 遍历所有的面
        cf = fl[i]              # 取出面
        if (len(cf) == 3): # 判断该面是否是三角面
            cp = c4d.CPolygon(cf[0], cf[1], cf[2])
        else:
            cp = c4d.CPolygon(cf[0], cf[1], cf[2], cf[3])
        a.SetPolygon(i, cp)  # 设置第i号面是cp
    a.SetAllPoints(pl)
    a.Message(c4d.MSG_UPDATE)
    
    return a

def main():
    pl = [c4d.Vector(0), c4d.Vector(100, 0, 100), c4d.Vector(100, 0, -100)]
    # a = makePoly(pl, [(0, 1, 2), (1, 2, 3)])
    a = makePoly(pl, [(0, 1, 2)])
     
    doc.InsertObject(a)
    c4d.EventAdd()

main()

三、制作效果

3.1 洗牌

1、简单效果制作

 

播放视频,每帧执行一次 mian 函数,外面的是全局变量

 现在编写一个每 20 帧改变一下样式的代码

import c4d
import random

rd = random.Random()

# ---- 全局变量 ---- 
# marr = 0

def main() -> bool:
    # ---- 全局变量 ---- 
    global marr

    # ---- 代码区 ---- 
    moData = c4d.modules.mograph.GeGetMoData(op)
    if moData is None:
        return False
    
    # 获取所在帧数   doc.GetFps(): 获取当前工程帧率
    cf = doc.GetTime().GetFrame(doc.GetFps())
    
    if cf == 0:
        marr = moData.GetArray(c4d.MODATA_MATRIX)
    
    # 打乱顺序
    if (cf % 20 == 0):
        rd.shuffle(marr)
    
    moData.SetArray(c4d.MODATA_MATRIX, marr, False)
    
    return True

 

2、代码检错处理

def main() -> bool:
    # ---- 全局变量 ---- 
    global marr

    # ---- 代码区 ---- 
    moData = c4d.modules.mograph.GeGetMoData(op)
    if moData is None:
        return False
    
    # 获取所在帧数   doc.GetFps(): 获取当前工程帧率
    cf = doc.GetTime().GetFrame(doc.GetFps())
    
    if cf == 0:
        marr = moData.GetArray(c4d.MODATA_MATRIX)
    
    # 检错处理
    try:
        # 打乱顺序
        if (cf % 20 == 0):
            rd.shuffle(marr)
        moData.SetArray(c4d.MODATA_MATRIX, marr, False)
    except:
        return False
    
    return True

3、每次的种子相同

4、添加动作

添加刚体标签,关闭重力

 

微调上面数据就行了 

 实际上,视频中是实现了,我并没有实现,但是我不清楚到底是啥原因,这部分我先跳过

3.2 后面的项目单独开文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java小技能:对list集合根据条件进行分组、过滤和字段筛选

文章目录 引言I 对list根据条件进行分组1.1 费率信息实体1.2 dto1.3 查询数据II 对list根据条件进行过滤和字段筛选1.1 代理商配置角色权限步骤1.2 实体1.3 穿透删除所有下级代理商相对应的权限值引言 需求背景:查询机构下的代理商费率信息,查询结果对分润和返利进行分组。 …

【云计算与大数据技术】Spark的解析(图文解释 超详细必看)

一、Spark RDD Spark是一个高性能的内存分布式计算框架,具备可扩展性,任务容错等特性,每个Spark应用都是由一个driver program 构成,该程序运行用户的 main函数 。 Spark提供的一个主要抽象就是 RDD(Resilient Distributed Data…

Java搭建宝塔部署实战SSM智能养生平台管理系统源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套Java开发的SSM智能养生平台管理系统源码。 技术架构 技术框架:ssm layui jsp mybatis bootstrap jquery mysql5.7运行环境:jdk8 nginx1.20 tomcat9 IntelliJ …

与电装DENSO建立EDI连接需要掌握哪些信息?

项目背景 株式会社电装DENSO CORPORATION是世界汽车零部件及系统的顶级供应商,在2013年《财富》周刊公布的世界500强企业排名中,位列第242名。作为世界顶级汽车技术、系统以及零部件的全球性供应商,电装在环境保护、发动机管理、车身电子产品…

DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(下)

接上篇~~ 三、处理文档、控制工作流程 顺畅的信息流是每个生产过程的基础。自动化任何基于文档的任务(从有效的重新提交文档到复杂的审批工作流程),让您的团队在跨组织和跨部门的工作中畅通无阻。 具有列表的任务管理 通过自动汇总当前信…

数字分类

目录 1012:数字分类 输入格式: 输出格式: 输入样例 1: 输出样例 1: 输入样例 2: 输出样例 2: 代码长度限制: 时间限制: 内存限制: 思路: 1.变量存储 1.2代码: 大坑,好多坑: 坑点1&#xff1…

Android 动态分区详解(六) 动态分区的底层机制

文章目录 1. Android 动态分区的两重含义2. device mapper 的原理3. linear 映射的原理3.1 多个设备映射示例3.2 `dmsetup create` 命令参数解释1. `dmsetup create` 命令2. 映射表格式解析3.3 单个设备映射示例1. 使用 dmsetup 映射单个设备2. 使用 dmctl 映射 super 设备本文…

二、物理层(二)传输介质和物理层设备

目录 2.1物理层概述 2.2导向型传输介质 2.2.1双绞线 2.2.2同轴电缆 2.2.3光纤 2.3非导向型传输介质 2.3.1无线电波 2.3.2微波 2.3.3红外线、激光 2.4物理层设备 2.4.1中继器 2.4.2集线器 2.1物理层概述 物理层考虑的是如何在连接到各种计算机的传输媒体上传输数据比…

推断统计 | 学习笔记 (全)

一.概率与概率分布 概率论:为解决不确定性问题提供方法 1.随机事件及其概率 基本概念 试验:在相同条件下,对事物或现象所进行的观察。特点是可以在相同的条件下重复进行;每次试验的可能结果不止一个,但试验的所有可…

QT—QString类

一、隐式共享 隐式数据共享机制去最大化资源有效利用和最小化复制克隆操作。隐式共享类当作为函数参数传递的时候,不仅安全而且效率很高,因为传递的时候只是传递的数据的指针,数据本身只当自己被修改的时候才会去复制。简称写时复制。数据相…

【AI with ML】第 2 章 :计算机视觉简介

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

前端大串讲,狂神,狂神,p6 01:00

一 概述 前端框架:vue、React、 uniapp(小程序)。前端脚手架:babel-cli、vue cli、webpack-cli服务器:node.js、java后端前端框架的用法: 方式1:用纯前端就可以独立的去完成一些前端项目的开发,并脱离于后…

正点原子 IMX6ULL 自学笔记(未完待续。。。)

一、Makefile 1、语法 目标…… : 依赖文件集合…… 命令 1 命令 2 …… 例子: 生成main可执行文件需要main.o input.o calcu.o,命令是gcc -o main main.o input.o calcu.o main: main.o input.o calcu.ogcc -o main main.o input.o calcu.omain.o: ma…

C++实现对象行为型-迭代器模式

1.1 基本概念 迭代器模式(Iterator Pattern):提供了一种方法来访问聚合对象,而不用暴露这个对象的内部。 聚合对象的两个基本功能: (1)存储内部数据; (2)…

MySQL表的进阶知识

目录 一、数据库约束 1、not null 2、unique 3、primary key 4、auto_increment 5、default 6、foreign key 7、check 二、插入数据 三、设计表 1、一对一 2、一对多 3、多对多 四、查询 1、聚合查询 a、聚合函数查询 b、group by c、having 2、联合查…

pikachu靶场-8 越权漏洞

越权漏洞 越权漏洞概述 由于没有对用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号(比如超级管理员)范围内的操作 平行越权:A用户和B用户属于同一级别用户,但各…

虚拟主播怎么做出来的?今日安利:AI虚拟人物怎么弄?

某天,一位品牌店的老板向我寻求帮助,大概内容就是:“他最近要开拓线上店铺的直播渠道,直播时间较长,雇一位主播又费钱又辛苦,想制作一个符合品牌调性的AI虚拟人物来带货。”于是我跟他分享了制作虚拟主播的…

北京医保定点医院2022年版

文章目录概述官方查询方法49家A类定点医院政府公告初始19家2021年4月新增13家A类医院2021年11月新增7家A类医院2022年6月新增10家A类医院定点中医/专科医院定点社区卫生服务机构附录问题医保电子凭证4家定点医院的查询和修改北京医保个人账户资金定向使用北京医院排行榜单概述 …

基于BINN算法的CCPP全路径覆盖算法

1.CCPP整体算法文档 1.1 ccpp基础介绍 全路径覆盖算法(CCPP: Complete Coverage Path Planning)作为扫地机器人较为关键的组成部分,其问题的本质是:在栅格地图中,全覆盖路径规划问题就演变为寻找机器人的下一个移动位置,只有准确…

java计算机毕业设计ssm职工社保信息管理系统t22xh(附源码、数据库)

java计算机毕业设计ssm职工社保信息管理系统t22xh(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#…