From eb4a8fba21dde51c4b0a33423e7691908345ae23 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 28 Jul 2025 13:54:44 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Gizmo3DMove::DuplicationCompo?= =?UTF-8?q?nents=E5=AE=9E=E7=8E=B0=EF=BC=8C=E5=88=A0=E9=99=A4Gizmo::Duplic?= =?UTF-8?q?ation=E5=AE=9E=E7=8E=B0=E3=80=82=E6=97=A7=E7=9A=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=8D=E5=AF=B9=EF=BC=8C=E5=A4=8D=E5=88=B6=E4=BA=86?= =?UTF-8?q?COMPONENT=EF=BC=8C=E4=BD=86=E8=AE=B0=E5=BD=95=E7=9A=84=E6=98=AF?= =?UTF-8?q?=E6=97=A7=E7=9A=84COMPONENT=EF=BC=8C=E6=89=80=E4=BB=A5=E6=94=B9?= =?UTF-8?q?OVERRIDE=20MATERIAL=E6=97=A0=E6=95=88=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/Gizmo/Gizmo3DMove.cpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index b5ab77b2..f41d6ee6 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -66,17 +66,25 @@ namespace 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) - return(nullptr); + #define DUPLICATION_COMPONENT(c) gmn->c=(MeshComponent *)(c->Duplication()); \ + gmn->AttachComponent(gmn->c); - new_gmn->sphere=sphere; - hgl_cpy(new_gmn->axis,axis); + DUPLICATION_COMPONENT(sphere); - 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) @@ -194,13 +202,12 @@ namespace Matrix4f l2w=GetLocalToWorldMatrix(); Vector3f start; Vector3f end; - Vector3f cross_point; float dist; 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);