大家好,我是独孤嘌呤。
今天接着讲螺旋参数化的碳纳米管,废话不多说,直接上视频(点击推文底部的“阅读原文”或者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≥m且n+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
教程方法不一定是最优的,代码也还有待改进的地方,大家在弄懂的前提下可以自行优化。另外,由于这是一个参数化控制的模型,普通的移动、旋转、缩放等操作可能会带来意想不到的问题。可以选择C掉(转为可编辑对象)之后再进行其他操作。
本期教程到此结束,感谢大家的收看!
更多精彩内容等你来学👇
Diamond系列教程
思斐迩(Sphere)——沟通科学与艺术的桥梁
我们的设计队伍是一支专业的硕博团队,具有深厚的科研底蕴,致力于为广大科研工作者提供最周到的科研图像设计服务。客户遍布全球,包括MIT、Stanford、Cornell、中科院、清华、北大等高校和科研机构,蜚声海内外。作品被CNS、JACS、Chem等期刊选作封面,并受邀为其制作科普动画。更有国内最大的科研作图教学公众号“3D科研绘图”,曾为浙江大学、复旦大学、武汉大学、中科院大连化物所等单位提供专业作图讲座和培训,线上线下总受众数超十万人。