Python으로 Nurbs 경로에 후크 추가
Python 스크립팅
스크립팅하는 동안 Nurbs Path에 후크를 추가하고 싶습니다.
레이아웃에서 :
'큐브'삭제 곡선 추가-> 편집 모드로 경로 변경 정점 선택 ctrl + h
모든 준비 완료
스크립팅 :
# Add Path
coords_list = ([[0,0,0], [1,0,0]])
path = bpy.data.curves.new('_path', 'CURVE')
path.dimensions = "3D"
spline = path.splines.new(type='POLY')
spline.points.add(len(coords_list)-1)
for p, new_co in zip(spline.points, coords_list):
p.co = (new_co + [1.0]) # (add nurbs weight)
Path = bpy.data.objects.new('_Path', path)
bpy.context.scene.collection.objects.link(Path)
bpy.data.objects [ '_ Path']. modifers [ ".... ID ...."]. vertex_indices [0] 설정은 읽기 전용입니다.
경로에 vertex_groups를 추가하려고하면 'None Type'이 반환됩니다.
어떤 아이디어?
THX 마틴
답변
가능하면 편집 모드를 사용하지 마십시오.
운영자없이 API 호출을 통해이를 수행 할 수 있다고 제안하십시오. lazilly가 op로 빈을 추가하고 원하는 경우 다른 개체가있는 것처럼 추가합니다.
테스트 스크립트는 폴리의 각 끝에 빈 후크를 추가합니다. 메모는 질문 제목에 따라 NURBS를 사용했습니다. 끝점을 가지려면 스플라인 의 use_endpoints_u및 v속성을 설정합니다 .
import bpy
from bpy import context
# Add Path
coords_list = ([[0,0,0], [1,0,0]])
path = bpy.data.curves.new('_path', 'CURVE')
path.dimensions = "3D"
spline = path.splines.new(type='NURBS')
spline.points.add(len(coords_list)-1)
spline.use_endpoint_u = True
spline.use_endpoint_v = True
path_ob = bpy.data.objects.new('_Path', path)
for i, (p, new_co) in enumerate(
zip(spline.points, coords_list)
):
p.co = (new_co + [1.0]) # (add nurbs weight)
bpy.ops.object.empty_add(
location=new_co,
)
hm = path_ob.modifiers.new(
name=f"Hook{i}",
type='HOOK',
)
hm.object = context.object
hm.vertex_indices_set([i])
context.collection.objects.link(path_ob)
레몬이 나에게 대답하라고 지시 한 후 :
나는 Python을 사용하여 곡선을 만들고 끝점을 Mutant Bob이 다시 게시 하는 두 개의 구체에 연결하는 것을 기반으로 한 hackish 방법http://web.purplefrog.com/~thoth/blender/python-cookbook/hook-modifier-curve.html 이 해킹의 아이디어는 편집 모드로 변경되는 것 같습니다.
P0.select = True로 설정하고
bpy.ops.object.hook_assign (modifier = ...)을 사용하여 vertex_indices를 설정하십시오.
이것은 Blender 2.83에서 2014 년이었습니다.
첫 번째 hook_assign 연산자는 어떻게 든 (물어 보지 마십시오-관찰입니다) P0.select = False
그래서:
오브젝트 모드로 변경 후-> 거기에서 뭔가 선택-> 경로를 한 번 더 선택-> 다시 편집 모드로 변경-> 설정 P0.select = False-> 설정 P1.select = True-> 오퍼레이터를 호출하여 후크 할당- > 다시 개체 모드로 변경
이 문제를 해결하기 위해 몇 시간을 소비 한 수치입니다.