Python社区  »  Python

当Python遇到C4D(下)

3D科研绘图 • 4 月前 • 88 次点击  

大家好,我是独孤嘌呤。


今天接着讲螺旋参数化的碳纳米管,废话不多说,直接上视频(点击推文底部的“阅读原文”或者b站搜索“独孤嘌呤”亦可观看)——


有了这个工程文件之后,以后创建各种CNT就是分分钟,哦不,就是秒秒钟的事了。推文中我会给出文件下载链接,毕竟我辛苦折腾几个晚上,还不是为了让你们以后作图更快乐更轻松。


如果愿意自己跟着做一遍,下面是我写的python代码,仅供参考:

👈可向左滑动

import c4d
from c4d.utils import VectorAngle
from math import *

def main():
    global pos0,pos1,pos2,pos3,theta
    global nw,nh,bend_size,bend_pos,clone_pos
    a1 = c4d.Vector(0,sqrt(3)*0.5*a,1.5*a)
    a2 = c4d.Vector(0,-sqrt(3)*0.5*a,1.5*a)
    v1 = n*a1+m*a2
    v2 = c4d.Vector(0,0,1)
    theta = VectorAngle(v1,v2)
    d = v1.GetLength()
    v = -c4d.Vector(0.5*d/pi,0,0.5*d)

    # spline vertex position
    pos0 = c4d.Vector(0,a/3,-d*0.5)+v
    pos1 = c4d.Vector(0,a/3,d*0.5)+v
    pos2 = c4d.Vector(0,l*a+a/3,d*0.5)+v
    pos3 = c4d.Vector(0,l*a+a/3,-d*0.5)+v

    # clone parameters
    w = (pos3.y*tan(theta)-pos0.z)*cos(theta)
    nw = int(2*w/a)
    h = pos2.y/cos(theta)+(pos1.z-pos2.y*tan(theta))*sin(theta)
    nh = int(4*h/a)
    clone_pos = v

    # bend parameters
    bend_size = c4d.Vector(0,d,l*a)
    bend_pos = 0.5*(pos0+pos2)


另外为了确保n≥mn+m≥3,在CNT参数前还添加了另一个python节点,来控制m和n的关系。


该节点的输出端就是m和n的值,代码如下:

import c4d

def main():
    global m,n
    CNT = doc.GetActiveObject()
    m = CNT[c4d.ID_USERDATA,2]
    n = CNT[c4d.ID_USERDATA,3]
    if n 3-m,m):
        n = max(3-m,m)


其中,ID_USERDATA的编号要根据自己设置的参数来设置,最简单的办法是直接将参数拖到python编辑器中。简单的几行代码就可以建立输入参数到python节点的反馈修正机制。


当然,本教程对大多数人来说是超纲的。实在学不来的话,也可以通过如下链接下载工程文件,感受一下参数化控制碳纳米管的乐趣。

链接:https://pan.baidu.com/s/1wPqlKnhYs65xDpzNV3g69g
提取码:k4pw


教程方法不一定是最优的,代码也还有待改进的地方,大家在弄懂的前提下可以自行优化。另外,由于这是一个参数化控制的模型,普通的移动、旋转、缩放等操作可能会带来意想不到的问题。可以选择C掉(转为可编辑对象)之后再进行其他操作。


本期教程到此结束,感谢大家的收看!


更多精彩内容等你来学👇

【专辑推荐】
C4D科研绘图系列教程
3D科研绘图往期教程精选
C4D科研模型100例

Diamond系列教程


思斐迩(Sphere)——沟通科学与艺术的桥梁

我们的设计队伍是一支专业的硕博团队,具有深厚的科研底蕴,致力于为广大科研工作者提供最周到的科研图像设计服务。客户遍布全球,包括MIT、Stanford、Cornell、中科院、清华、北大等高校和科研机构,蜚声海内外。作品被CNS、JACS、Chem等期刊选作封面,并受邀为其制作科普动画。更有国内最大的科研作图教学公众号“3D科研绘图”,曾为浙江大学、复旦大学、武汉大学、中科院大连化物所等单位提供专业作图讲座和培训,线上线下总受众数超十万人。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/71347
 
88 次点击  
分享到微博