增加Gizmo3DMove::DuplicationComponents实现,删除Gizmo::Duplication实现。旧的方法不对,复制了COMPONENT,但记录的是旧的COMPONENT,所以改OVERRIDE MATERIAL无效。

This commit is contained in:
2025-07-28 13:54:44 +08:00
parent 6b86823755
commit eb4a8fba21

View File

@@ -66,17 +66,25 @@ namespace
return(new GizmoMoveNode); return(new GizmoMoveNode);
} }
SceneNode *Duplication()const override void DuplicationComponents(SceneNode *node) const override
{ {
GizmoMoveNode *new_gmn=(GizmoMoveNode *)SceneNode::Duplication(); GizmoMoveNode *gmn=(GizmoMoveNode *)node;
if(!gmn)
return;
if(!new_gmn) #define DUPLICATION_COMPONENT(c) gmn->c=(MeshComponent *)(c->Duplication()); \
return(nullptr); gmn->AttachComponent(gmn->c);
new_gmn->sphere=sphere; DUPLICATION_COMPONENT(sphere);
hgl_cpy(new_gmn->axis,axis);
return new_gmn; for(size_t i=0;i<3;i++)
{
DUPLICATION_COMPONENT(axis[i].cylinder);
DUPLICATION_COMPONENT(axis[i].cone);
DUPLICATION_COMPONENT(axis[i].square);
}
#undef DUPLICATION_COMPONENT
} }
bool CreateGizmoGeometry(RenderFramework *render_framework) bool CreateGizmoGeometry(RenderFramework *render_framework)
@@ -194,13 +202,12 @@ namespace
Matrix4f l2w=GetLocalToWorldMatrix(); Matrix4f l2w=GetLocalToWorldMatrix();
Vector3f start; Vector3f start;
Vector3f end; Vector3f end;
Vector3f cross_point;
float dist; float dist;
start=TransformPosition(l2w,Vector3f(0,0,0)); //将原点转换到世界坐标 start=TransformPosition(l2w,Vector3f(0,0,0)); //将原点转换到世界坐标
{ {
end=TransformPosition(l2w,Vector3f(GIZMO_CYLINDER_HALF_LENGTH*20,0,0)); end=TransformPosition(l2w,Vector3f((GIZMO_CONE_LENGTH+GIZMO_CYLINDER_HALF_LENGTH)*20,0,0));
dist=ray.ToLineSegmentDistance(start,end); dist=ray.ToLineSegmentDistance(start,end);