
パーティクルヘアーのポイントを取得して、カーブのスプラインを作成する方法を紹介する。
ちなみに下記のサンプルスクリプトの処理は、通常の機能だけでも同様のことができる(パーティクルモディファイアのメニューからメッシュに変換したあとカーブに変換する。ウェイトは引き継げない)。
スクリプト

# カーブ作成
cv_data = bpy.data.curves.new("cv","CURVE")
cv_obj = bpy.data.objects.new("cv",cv_data)
cv_obj.data.bevel_depth = 0.1
cv_obj.data.dimensions = '3D'
bpy.context.collection.objects.link(cv_obj)
# パーティクルオブジェクト
dg = context.evaluated_depsgraph_get()
pt_obj = context.object.evaluated_get(dg)
pt_obj_mw = pt_obj.matrix_world
act_pt = pt_obj.particle_systems.active
# パスを回す
for path in act_pt.particles:
newcv = cv_obj.data.splines.new('POLY')
# ポイントを追加する(既に2ポイントはあるので引く必要がある)
if len(path.hair_keys) > 2:
newcv.points.add(len(path.hair_keys)-1)
# ポイントの位置・ウェイト・半径を設定する
for i,ky in enumerate(path.hair_keys):
new_co = pt_obj_mw @ ky.co
new_co = cv_obj.matrix_world.inverted() @ new_co
new_co = (
new_co[0],
new_co[1],
new_co[2],
1
)
pt = newcv.points[i]
pt.co = new_co
pt.radius = ky.weight
pt.weight_softbody = ky.weight
上のスクリプトでは、
cvというカーブオブジェクトを作成し、
アクティブオブジェクトのアクティブなパーティクルヘアーのポイントの
位置・ウェイト・半径を引き継いだカーブスプラインを作成する。
参考

パーティクルヘアーのポイント位置は、coだけではうまく取得できないため、evaluated_depsgraph_getというモディファイアやコンストレイントなどの影響を受けた最終的なオブジェクトの結果を得ることができる要素を使うことで位置を得ることができる模様。
python - Making sense of hair_key coordinates - Blender Stack Exchange