在一根圆柱体中间生成一根或者几根曲线是工作中经常会遇到的问题。比较简单的应用场景是毛发组在头发简模上生成曲线;比较复杂的应用场景是在树木模型中间生成曲线。

一个比较简单的思路就是把圆柱简化为几根圆环,然后求出每根圆环的中心点,继而连起来形成一根曲线。

下面来尝试实现这个思路,首先将模型转为nurbsSurface,然后用一个小工具将surface转为几根圆环。

surface 转 curve 工具

链接:https://pan.baidu.com/s/18j_9RGHBlXHQe10VXlcUlA 密码:nbwi

下面是实现代码

# coding=utf-8

import pymel.core as pm
import random
import math

# 先按顺序选择全部Curve
curves = pm.selected()
if len(curves) < 1:
    print u"请选择曲线"
obj = pm.selected()[0]
curve_index_list = [vertex.index() for vertex in obj.cv]
n = 0
gen_curves = 1  # 生成gen_curves根线
curve_index_list_new_list = []

while (n < gen_curves):
    num = len(curve_index_list)
    pos_list = []
    vertexs_pos_list = []
    # 遍历所有已选择的曲线
    for curve in curves:
        pos_list = []
        for vertex in curve.cv:
            if vertex.index() in curve_index_list:
                pos_list.append(vertex.getPosition('world'))
        center_pos = sum(pos_list) / len(pos_list)
        vertexs_pos_list.append(center_pos)
    pm.curve(degree=2, point=vertexs_pos_list)
    n += 1